webpack 的externals配置

為什么要配置externals

  • 官網(wǎng)解釋:

webpack 中的 externals 配置提供了不從 bundle 中引用依賴的方式顶籽。解決的是,所創(chuàng)建的 bundle 依賴于那些存在于用戶環(huán)境(consumer environment)中的依賴亭螟。

怎么理解呢医清,意思是如果需要引用一個(gè)庫,但是又不想讓webpack打包(減少打包的時(shí)間)谒臼,并且又不影響我們在程序中以CMD、AMD或者window/global全局等方式進(jìn)行使用(一般都以import方式引用使用)耀里,那就可以通過配置externals蜈缤。

這樣做的目的就是將不怎么需要更新的第三方庫脫離webpack打包,不被打入bundle中冯挎,從而減少打包時(shí)間底哥,但又不影響運(yùn)用第三方庫的方式,例如import方式等房官。

externals支持模塊上下文的方式

  • global - 外部 library 能夠作為全局變量使用趾徽。用戶可以通過在 script 標(biāo)簽中引入來實(shí)現(xiàn)。這是 externals 的默認(rèn)設(shè)置翰守。

  • commonjs - 用戶(consumer)應(yīng)用程序可能使用 CommonJS 模塊系統(tǒng)孵奶,因此外部 library 應(yīng)該使用 CommonJS 模塊系統(tǒng),并且應(yīng)該是一個(gè) CommonJS 模塊蜡峰。

  • commonjs2 - 類似上面幾行了袁,但導(dǎo)出的是 module.exports.default。

  • amd - 類似上面幾行事示,但使用 AMD 模塊系統(tǒng)早像。

怎么運(yùn)用externals

例如:

index.html中引入CDN的資源react全家桶之類的資源

      <script src="https://lib.baomitu.com/react/16.4.0-alpha.7926752/cjs/react.development.js"></script>
      <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.3.2/cjs/react-dom-server.browser.development.js
"></script>
     

webpack.config.js配置如下:

  module.exports = {
     ...
     output: {
       ...
     },
     externals : {
       react: 'react',
       redux: 'redux'
     }
     ...
   }

這樣的話在應(yīng)用程序中依舊可以以import的方式(還支持其他方式)引用:

import React from 'react';
import { createStore, combineReducers, applyMiddleware } from 'redux';

這樣不僅之前對第三方庫的用法方式不變僻肖,還把第三方庫剝離出webpack的打包中肖爵,從而加速webpack的打包速度。

externals和libraryTarget的關(guān)系

  • libraryTarget配置如何暴露 library臀脏。如果不設(shè)置library,那這個(gè)library就不暴露劝堪。就相當(dāng)于一個(gè)自執(zhí)行函數(shù)

  • externals是決定的是以哪種模式去加載所引入的額外的包

  • libraryTarget決定了你的library運(yùn)行在哪個(gè)環(huán)境冀自,哪個(gè)環(huán)境也就決定了你哪種模式去加載所引入的額外的包。也就是說秒啦,externals應(yīng)該和libraryTarget保持一致熬粗。library運(yùn)行在瀏覽器中的,你設(shè)置externals的模式為commonjs余境,那代碼肯定就運(yùn)行不了了驻呐。

  • 如果是應(yīng)用程序開發(fā),一般是運(yùn)行在瀏覽器環(huán)境libraryTarget可以不設(shè)置芳来,externals默認(rèn)的模式是global含末,也就是以全局變量的模式加載所引入外部的庫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末即舌,一起剝皮案震驚了整個(gè)濱河市佣盒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌顽聂,老刑警劉巖肥惭,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異紊搪,居然都是意外死亡蜜葱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門耀石,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笼沥,“玉大人,你說我怎么就攤上這事娶牌”记常” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵诗良,是天一觀的道長汹桦。 經(jīng)常有香客問我,道長鉴裹,這世上最難降的妖魔是什么舞骆? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮径荔,結(jié)果婚禮上督禽,老公的妹妹穿的比我還像新娘。我一直安慰自己总处,他們只是感情好狈惫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹦马,像睡著了一般胧谈。 火紅的嫁衣襯著肌膚如雪忆肾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天菱肖,我揣著相機(jī)與錄音客冈,去河邊找鬼。 笑死稳强,一個(gè)胖子當(dāng)著我的面吹牛场仲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播退疫,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼燎窘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蹄咖?” 一聲冷哼從身側(cè)響起褐健,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澜汤,沒想到半個(gè)月后蚜迅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俊抵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年谁不,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片徽诲。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刹帕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谎替,到底是詐尸還是另有隱情偷溺,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布钱贯,位于F島的核電站挫掏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏秩命。R本人自食惡果不足惜尉共,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望弃锐。 院中可真熱鬧袄友,春花似錦、人聲如沸霹菊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至券敌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間柳洋,已是汗流浹背待诅。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熊镣,地道東北人卑雁。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像绪囱,于是被迫代替她去往敵國和親测蹲。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容