国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

Webpack的dll功能使用

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:12:15
文檔

Webpack的dll功能使用

Webpack的dll功能使用:最近使用Webpack遇到了一個(gè)坑。 我們構(gòu)建前端項(xiàng)目的時(shí)候,往往希望第三方庫(vendors)和自己寫的代碼可以分開打包,因?yàn)榈谌綆焱恍枰?jīng)常打包更新。對(duì)此Webpack的文檔建議用CommonsChunkPlugin來單獨(dú)打包第三方庫。 entry: { vendor
推薦度:
導(dǎo)讀Webpack的dll功能使用:最近使用Webpack遇到了一個(gè)坑。 我們構(gòu)建前端項(xiàng)目的時(shí)候,往往希望第三方庫(vendors)和自己寫的代碼可以分開打包,因?yàn)榈谌綆焱恍枰?jīng)常打包更新。對(duì)此Webpack的文檔建議用CommonsChunkPlugin來單獨(dú)打包第三方庫。 entry: { vendor

最近使用Webpack遇到了一個(gè)坑。

我們構(gòu)建前端項(xiàng)目的時(shí)候,往往希望第三方庫(vendors)和自己寫的代碼可以分開打包,因?yàn)榈谌綆焱恍枰?jīng)常打包更新。對(duì)此Webpack的文檔建議用CommonsChunkPlugin來單獨(dú)打包第三方庫。

entry: {
 vendor: ["jquery", "other-lib"],
 app: "./entry"
}
new CommonsChunkPlugin({
 name: "vendor",

 // filename: "vendor.js"
 // (Give the chunk a different name)

 minChunks: Infinity,
 // (with more entries, this ensures that no other module
 // goes into the vendor chunk)
})

通常為了對(duì)抗緩存,我們會(huì)給售出文件的文件名中加入hash的后綴——但是——我們編輯了app部分的代碼后,重新打包,發(fā)現(xiàn)vendor的hash也變化了!

這么一來,意味著每次發(fā)布版本的時(shí)候,vendor代碼都要刷新,即使我并沒有修改其中的代碼。這樣并不符合我們分開打包的初衷。

帶著問題我瀏覽了Github上的討論,發(fā)現(xiàn)了一個(gè)神器:dll。

Dll是Webpack最近新加的功能,我在網(wǎng)上并沒有找到什么中文的介紹,所以在這里我就簡(jiǎn)單介紹一下。

Dll這個(gè)概念應(yīng)該是借鑒了Windows系統(tǒng)的dll。一個(gè)dll包,就是一個(gè)純純的依賴庫,它本身不能運(yùn)行,是用來給你的app引用的。

打包dll的時(shí)候,Webpack會(huì)將所有包含的庫做一個(gè)索引,寫在一個(gè)manifest文件中,而引用dll的代碼(dll user)在打包的時(shí)候,只需要讀取這個(gè)manifest文件,就可以了。

這么一來有幾個(gè)好處:

  1. Dll打包以后是獨(dú)立存在的,只要其包含的庫沒有增減、升級(jí),hash也不會(huì)變化,因此線上的dll代碼不需要隨著版本發(fā)布頻繁更新。
  2. App部分代碼修改后,只需要編譯app部分的代碼,dll部分,只要包含的庫沒有增減、升級(jí),就不需要重新打包。這樣也大大提高了每次編譯的速度。
  3. 假設(shè)你有多個(gè)項(xiàng)目,使用了相同的一些依賴庫,它們就可以共用一個(gè)dll。

如何使用呢?

首先要先建立一個(gè)dll的配置文件,entry只包含第三方庫:

const webpack = require('webpack');

const vendors = [
 'antd',
 'isomorphic-fetch',
 'react',
 'react-dom',
 'react-redux',
 'react-router',
 'redux',
 'redux-promise-middleware',
 'redux-thunk',
 'superagent',
];

module.exports = {
 output: {
 path: 'build',
 filename: '[name].[chunkhash].js',
 library: '[name]_[chunkhash]',
 },
 entry: {
 vendor: vendors,
 },
 plugins: [
 new webpack.DllPlugin({
 path: 'manifest.json',
 name: '[name]_[chunkhash]',
 context: __dirname,
 }),
 ],
};

webpack.DllPlugin的選項(xiàng)中,path是manifest文件的輸出路徑;name是dll暴露的對(duì)象名,要跟output.library保持一致;context是解析包路徑的上下文,這個(gè)要跟接下來配置的dll user一致。

運(yùn)行Webpack,會(huì)輸出兩個(gè)文件一個(gè)是打包好的vendor.js,一個(gè)就是manifest.json,長(zhǎng)這樣:

{
 "name": "vendor_ac51ba426d4f259b8b18",
 "content": {
 "./node_modules/antd/dist/antd.js": 1,
 "./node_modules/react/react.js": 2,
 "./node_modules/react/lib/React.js": 3,
 "./node_modules/react/node_modules/object-assign/index.js": 4,
 "./node_modules/react/lib/ReactChildren.js": 5,
 "./node_modules/react/lib/PooledClass.js": 6,
 "./node_modules/react/lib/reactProdInvariant.js": 7,
 "./node_modules/fbjs/lib/invariant.js": 8,
 "./node_modules/react/lib/ReactElement.js": 9,
 
 ............

Webpack將每個(gè)庫都進(jìn)行了編號(hào)索引,之后的dll user可以讀取這個(gè)文件,直接用id來引用。

Dll user的配置:

const webpack = require('webpack');

module.exports = {
 output: {
 path: 'build',
 filename: '[name].[chunkhash].js',
 },
 entry: {
 app: './src/index.js',
 },
 plugins: [
 new webpack.DllReferencePlugin({
 context: __dirname,
 manifest: require('./manifest.json'),
 }),
 ],
};

DllReferencePlugin的選項(xiàng)中,context需要跟之前保持一致,這個(gè)用來指導(dǎo)Webpack匹配manifest中庫的路徑;manifest用來引入剛才輸出的manifest文件。

運(yùn)行Webpack之后,結(jié)果如下:

對(duì)比一下不做分離的情況下打包的結(jié)果:

速度快了,文件也小了。

平時(shí)開發(fā)的時(shí)候,修改代碼后重新編譯的速度會(huì)大大減少,節(jié)省時(shí)間。

如果有多個(gè)項(xiàng)目,使用相同的一套庫,你可以在打包的時(shí)候引用相同的manifest文件,這樣就可以在項(xiàng)目之間共享了。

參考:

https://webpack.github.io/docs/list-of-plugins.html#dllplugin

https://github.com/webpack/webpack/tree/master/examples/dll

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Webpack的dll功能使用

Webpack的dll功能使用:最近使用Webpack遇到了一個(gè)坑。 我們構(gòu)建前端項(xiàng)目的時(shí)候,往往希望第三方庫(vendors)和自己寫的代碼可以分開打包,因?yàn)榈谌綆焱恍枰?jīng)常打包更新。對(duì)此Webpack的文檔建議用CommonsChunkPlugin來單獨(dú)打包第三方庫。 entry: { vendor
推薦度:
標(biāo)簽: 功能 使用 作用
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 成人精品一区二区激情 | 激情欧美一区二区三区 | 欧美日韩高清在线 | 欧美多p| 国产精品久久久久… | 亚洲欧美日本综合 | 伊人网免费视频 | 日本不卡一区二区三区 最新 | 欧美日韩高清一区二区三区 | 久久91精品久久91综合 | 亚洲一区二区免费看 | 日本不卡一区二区三区 最新 | 97精品国产91久久久久久久 | 最新国产在线 | 精品国产免费人成在线观看 | 一区二区三区在线免费 | 不卡一级aaa全黄毛片 | 午夜视频一区 | 久久久久久国产精品免费 | 91色欧美 | 人善交xxx | 久久久精品国产 | 日韩亚洲视频 | 美女视频黄全免费的 | 亚洲欧美在线视频观看 | 亚洲三级电影网站 | 亚洲欧美日韩在线观看 | 欧美日韩成人在线视频 | 国产精品亚洲精品日韩动图 | 亚洲国产精品久久久久久 | 欧美日韩极品 | 好看的电影网站亚洲一区 | 全免费一级午夜毛片 | 久久91av| 欧美成人性色生活18黑人 | 人人草人人澡 | 亚洲精品在线免费观看 | 国产精品久久久久久久 | 日韩视频一区二区三区 | 日韩精品一区二区三区国语自制 | 免费又黄又爽又猛大片午夜 |