亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

深入淺出webpack之externals的使用

2019-11-19 14:47:52
字體:
來源:轉載
供稿:網友

我們通常在做項目時可能會把第三方庫打包到bundle中,比如下面這張圖

如果不想把第三方庫打包到bundle中,這就有了externals。官方的使用externals比較簡單

externals

官網文檔解釋的很清楚,就是webpack可以不處理應用的某些依賴庫,使用externals配置后,依舊可以在代碼中通過CMD、AMD或者window/global全局的方式訪問。

只需三步――

1.在HTML中引入第三方庫的cdn

2.在webpack中配置externals

externals: { jquery: "jQuery",}

3.在js中引用

const $ = require("jquery");$("#content").html("<h1>hello world</h1>");

好,現在我們可以隨心所欲的使用jquery插件并保證不會打包到bundle中。external是怎么辦到的呢?下面我們通過bundle的源碼來分析下原理。

這里的/* 0 */和__webpack_require__分別指打包前js對應的模塊函數,這里就不細說了。這里可以看到module.exports = jQuery,就是說我們externals中的key指的是require的東西,value指的就是它,就是說“當require的參數是jquery的時候,使用jQuery這個全局變量引用它”。這種最簡潔的externals配置方式為默認的global模式,就是在window上掛一個全局變量,然后直接可以使用這個變量。具體的流程是這樣,我們在源碼中使用require('jquery')后,可以直接把jquery加到externals中,得到一個打包的trunk.js,但是在引入這個trunkjs之前,肯定要先引入jquery這個庫文件,這個庫文件會創建一個全局變量jQuery,而咱們的trunkjs中externals的jquery是global模式,所以實際上trunkjs引入jquery的時候,就會從全局變量中引用,即module.export = jQuery

當然,既然是通過這種externals方式,其實我們可以不用require引入,直接使用全局變量也是可以的。

jQuery("#content").html("<h1>hello world</h1>");

大家如果注意到我剛說過的global模式的話,沒錯,你也許已經猜到了,我可以任意的使用不同的輸出方式。如果打包文件我想運行到node環境下,我得使用commonjs規范,所以你要這么寫。

externals: { jquery: "commonjs2 jQuery",}

打包后會是這樣子。

然后我的項目中還用到了lodash,也想把它從bundle中移除,之前我的代碼是這樣子,引的是npm包

現在我們的externals配置如下

externals: {  jquery: "jQuery",  _: "lodash"}

我們必須要去掉這個const ,否則的話會報一個錯誤 lodash is not defined。為什么會這樣呢?因為我們的lodash輸出是global格式的,我在這里先賣一個關子,我們先統一一下輸出格式,加一個libraryTarget字段

這個東西是干嘛用的呢?

他是我們輸出文件的模塊化規范,想想我們上面配置的commonjs jquery是運行在node下,總之記住一句話――我們最長使用的模塊化方案是commonjs2和umd,前者是為node環境,后者是為瀏覽器環境。一共有這幾種規范:

"var" - Export by setting a variable: var Library = xxx (default)

"this" - Export by setting a property of this: this["Library"] = xxx
"commonjs" - Export by setting a property of exports: exports["Library"] = xxx
"commonjs2" - Export by setting module.exports: module.exports = xxx
"amd" - Export to AMD (optionally named - set the name via the library option)
"umd" - Export to AMD, CommonJS2 or as property in root

然后報這個錯誤,也就是說我們的模塊沒有正確的輸出,回到我們的externals,它更多的是指定當你引用一個包的時候,這個包(lodash)應該遵循哪種模塊化方式(common,root,amd等等)引入,這意思就是說,打包的時候不需要關心他到底怎么輸出。

externals: {  jquery: "jQuery",  lodash: {   commonjs: 'lodash',   commonjs2: 'lodash',   amd: 'lodash',   root: '_'  } },

ok,記得要將之前的覆蓋掉,替換成下面的require,因為在externals中我們規范的commmonjs規范為lodash

也就是說,這就是我們最初的代碼,即沒有用過externals時候的代碼,看,也就是說我們只需要配置externals和libraryTarget就可以,其他的業務邏輯代碼不需要改變。包括我們的項目中還用了echarts,這個通通不用改變?。。。。?/p>

也就是說最終的代碼是externals配合libraryTarget一起使用,如果去掉umd的話,會報這個錯誤

相應的源碼是這樣子

就是說我不知道通過那種方式輸出,所以我應該告訴webpack,我通過umd方式輸出,即將你的 lodash 暴露為所有的模塊定義下都可運行的方式。它將在 CommonJS, AMD 環境下運行,或將模塊導出到 global 下的變量.加上umd的源碼如下

看到了吧,我通過require('lodash')引入模塊,輸出走的是commonjs規范,貼下最終的配置

entry: {  main: './src/index.js' }, externals: {  jquery: "jQuery",  lodash: {   commonjs: 'lodash',   commonjs2: 'lodash',   amd: 'lodash',   root: '_'  } }, output: {  filename: '[name].[chunkhash].js',  path: path.resolve(__dirname,'dist'),  libraryTarget: 'umd' },

 以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人春色激情网| 国产精品流白浆视频| 欧美又大又粗又长| 日韩小视频在线| 亚洲a在线播放| 亚洲午夜色婷婷在线| 91精品国产91久久久久| 色偷偷偷综合中文字幕;dd| 久久精品国产一区二区三区| 欧美一级淫片aaaaaaa视频| 成人精品一区二区三区电影黑人| 久久69精品久久久久久久电影好| 日韩亚洲一区二区| 欧美猛少妇色xxxxx| 精品露脸国产偷人在视频| 精品亚洲永久免费精品| 最近2019中文免费高清视频观看www99| 国产91成人video| 亚洲国产日韩欧美在线99| 国产日韩在线视频| www亚洲精品| 亚洲一区二区福利| 91伊人影院在线播放| 亚洲精品成人av| 国产精品网址在线| 在线中文字幕日韩| 国产99久久久欧美黑人| 91精品国产99久久久久久| 日韩免费在线电影| 欧美日韩亚洲国产一区| 亚洲奶大毛多的老太婆| 欧美综合一区第一页| 亚洲3p在线观看| 日韩av手机在线观看| 亚洲一区二区在线| 91精品久久久久久久久久久久久久| 国产精品视频专区| 精品日本美女福利在线观看| 国外成人免费在线播放| 国产精品视频一区二区高潮| 国产日韩欧美电影在线观看| 国产成人精品a视频一区www| 国内精品一区二区三区| 午夜精品99久久免费| 一道本无吗dⅴd在线播放一区| 亚洲美女www午夜| 亚洲精品影视在线观看| 久久九九亚洲综合| 国产精品久久久久久久久久久久| 欧美日韩美女视频| 国产精品美女免费视频| 精品福利在线视频| 欧美精品videosex牲欧美| 欧美亚洲成人网| 中文字幕精品在线| 精品偷拍各种wc美女嘘嘘| 欧洲亚洲女同hd| 性视频1819p久久| 自拍视频国产精品| 亚洲已满18点击进入在线看片| 毛片精品免费在线观看| 国产精品99久久99久久久二8| 最近2019年中文视频免费在线观看| 亚洲欧洲成视频免费观看| 亚洲香蕉伊综合在人在线视看| 视频在线一区二区| 久久久国产一区二区三区| 亚洲女人天堂色在线7777| 亚洲欧洲一区二区三区久久| 国产精品永久免费观看| 国产精品大陆在线观看| 久久久久久久久久久网站| 欧美精品日韩www.p站| 欧美激情女人20p| 日韩成人激情在线| 亚洲人成人99网站| 伊人久久男人天堂| 在线精品国产成人综合| 久久久免费高清电视剧观看| 日韩av网站导航| 欧美又大又粗又长| 国产精品自拍网| 中文日韩电影网站| 亚洲精品成人久久电影| 亚洲日本欧美日韩高观看| 欧美孕妇性xx| www.亚洲成人| 国产午夜精品全部视频在线播放| 国模极品一区二区三区| 亚洲 日韩 国产第一| 欧美日韩裸体免费视频| 欧美亚洲成人网| 成人午夜小视频| 中文字幕国产精品久久| 久久免费视频网| 欧美日韩激情视频| 欧美视频在线观看免费| 亚洲影视九九影院在线观看| 中文字幕av日韩| 国产成人一区二| 日韩国产高清视频在线| 国产成人精品av在线| 欧美成aaa人片在线观看蜜臀| 911国产网站尤物在线观看| 日韩精品欧美国产精品忘忧草| 国产精彩精品视频| 97久久精品在线| 日韩a**中文字幕| 欧美孕妇孕交黑巨大网站| 亚洲图片在线综合| 国产日韩在线免费| 国产丝袜高跟一区| 日韩精品一区二区三区第95| 正在播放欧美视频| 成人中文字幕在线观看| 国产91色在线| 国产精品ⅴa在线观看h| 91在线免费视频| 久久中文字幕在线| 国产精品99久久久久久人| 欧美成人精品不卡视频在线观看| 日本在线观看天堂男亚洲| 国产精品27p| 国产欧美精品日韩精品| 97精品国产97久久久久久春色| 久久在线免费观看视频| 精品毛片三在线观看| 日韩美女在线播放| 亚洲女人天堂视频| 中文字幕亚洲欧美日韩高清| 一个人看的www欧美| 久久精品视频一| 欧美电影免费观看| 亚洲欧美一区二区激情| 国产精品av在线| 日韩在线视频免费观看高清中文| 国产在线高清精品| 国产mv免费观看入口亚洲| 国产精品jvid在线观看蜜臀| 成人精品在线视频| 久久精品视频在线播放| 国产欧美精品久久久| 久久99精品国产99久久6尤物| 日韩欧美视频一区二区三区| 91国产美女视频| 国产精品午夜一区二区欲梦| 伊人男人综合视频网| 国产成人亚洲综合91精品| 欧美性xxxx极品hd欧美风情| 亚洲国产美女精品久久久久∴| 久久精彩免费视频| 色黄久久久久久| 日韩精品久久久久久久玫瑰园| 亚洲人成自拍网站| 亚洲乱码国产乱码精品精| 国内外成人免费激情在线视频| 欧美大片网站在线观看| 色偷偷av一区二区三区乱| 日韩精品在线观看视频| 日韩视频亚洲视频| 欧美午夜久久久| 最新国产成人av网站网址麻豆| 亚洲小视频在线| 欧美成人午夜激情|