摘要:瀏覽器需要重新下載打包后的文件,即使文件的絕大部分都沒有變化。分離并且以來命名新的入口能夠緩和當(dāng)前的問題?,F(xiàn)在運(yùn)行綁定的檢查結(jié)果是只是被綁定到這個綁定文件中。
分離庫代碼Code Splitting - Libraries
這個在webpack2.x中文網(wǎng)已存在,點(diǎn)擊這里
讓我們想一個簡單的應(yīng)用——momentjs,他是一個事件格式化的庫。
安裝moment.
npm install --save moment
index文件將調(diào)用moment作為依賴來記錄現(xiàn)在時間。
index.jsvar moment = require("moment"); console.log(moment().format());
我們可以用下面的配置來打包應(yīng)用。
webpack.config.jsmodule.exports = function(env) { return { entry: "./index.js", output: { filename: "[chunkhash].[name].js`, path: "./dist" } } }
在你的應(yīng)用中運(yùn)行webpack,然后檢查打包的結(jié)果,你會發(fā)現(xiàn)moment和index.js被打包合并到bundle.js中了。
對于應(yīng)用來說這不是我們想要的。如果index.js代碼放生了變化,整個bundle.js需要重新打包一遍。瀏覽器需要重新下載打包后的文件,即使文件的絕大部分都沒有變化。
mutilple Entries 多個文件入口。分離moment并且以vendor來命名新的入口能夠緩和當(dāng)前的問題。
webpack.config.js webpack配置module.exports = function(env) { return { entry: { main: "./index.js", vendor: "moment" }, output: { filename: "[chunkhash].[name].js`, path: "./dist" } } }
運(yùn)行webpack,你會發(fā)現(xiàn)兩個被打包的文件被輸出。如果你檢查的話會發(fā)現(xiàn),moment在這兩個文件中都存在。
CommonsChunkPlugin這是一個非常復(fù)雜的插件。他的重要功能從不同的bundle文件中摘除相同的模塊,然后綁定到一個bundle文件中。
如果一個公共bundle文件不存在,那么就會創(chuàng)建一個。
我們可如下修改配置文件來使用CommonsChunkPlugin插件。
var webpack = require("webpack"); module.exports = function(env) { return { entry: { main: "./index.js", vendor: "moment" },v output: { filename: "[chunkhash].[name].js`, path: "./dist" }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: "vendor" // Specify the common bundle"s name. }) ] } }
現(xiàn)在運(yùn)行webpack,綁定的檢查結(jié)果是moment只是被綁定到vendor這個綁定文件中。
Manifest file(證明文件)應(yīng)該注意到,如果我們改變應(yīng)用的代碼,然后運(yùn)行webapck,將會發(fā)現(xiàn)vendor綁定文件的也發(fā)生了變化。
即使vendor和main兩個綁定的問價是分開執(zhí)行綁定的,一個變化另一個沒有變化會導(dǎo)致兩個文件的hash
都發(fā)生變化。這說明我們還是沒有獲得瀏覽器緩存文件的好處,因?yàn)槲募膆ash導(dǎo)致名字都發(fā)生了變化。因此他們都會重新下載。
這種問題會出現(xiàn)每次buil的時候。webpack生成一些webpack運(yùn)行碼,它幫助webpack做它的事。當(dāng)只有一個
bundle綁定文件時,運(yùn)行碼在他的內(nèi)部。但是有多個bundle被生成時,他在common build中,也就是vendor文件中。
為了解決這個問題,我們需要摘出來一個文件專門存放運(yùn)行碼,這個文件是mainifest file。通過每次創(chuàng)建一個其他的文件--manifest,在它的前面是一大堆我們需要緩存的文件,在vendor中。
webpack.config.jsvar webpack = require("webpack"); module.exports = function(env) { return { entry: { main: "./index.js", vendor: "moment" }, output: { filename: "[chunkhash].[name].js`, path: "./dist" }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ names: ["vendor", "manifest"] // Specify the common bundle"s name. }) ] } };
通過上面的配置,我們可以看到三個bundle被生成,vendor,main以及manifestbundle。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/81861.html
摘要:代碼分離代碼分離是最受矚目的功能。下面有兩種代碼分離的技術(shù)。使用實(shí)現(xiàn)代碼分離是使用的方式實(shí)現(xiàn)靜待資源異步調(diào)用。通過添加,我們可以在代碼中打一個分離點(diǎn),可以以此建立一個獨(dú)立的包,包含這個點(diǎn)的所有代碼。 代碼分離(Code Splitting) 代碼分離是webpack最受矚目的功能。它允許你把你的代碼分成不同的部分分開打包,然后實(shí)現(xiàn)在需要的時候再進(jìn)行加載(按需加載提高速度)————例如用...
摘要:代碼分離使用中文文檔地址點(diǎn)擊這里動態(tài)導(dǎo)入目前,類函模塊加載的語法建議整體交給。在中的是個分離點(diǎn),用來把被請求的模塊獨(dú)立成一個單獨(dú)的模塊。被替代因?yàn)樵谥惺褂靡呀?jīng)不合建議規(guī)范,因此將在版本中啟用。 代碼分離-使用import() 中文文檔地址點(diǎn)擊這里 動態(tài)導(dǎo)入 目前,類函模import()塊加載的語法建議——syntax proposal整體交給ECMAScript。ES2015(es6)...
摘要:依賴管理該條已在中文網(wǎng)存在,點(diǎn)擊這里表達(dá)式來調(diào)用當(dāng)你的請求包含表達(dá)式,那個一個上下文環(huán)境將被創(chuàng)建。一個包含所有父文件夾和子及后代文件夾中以結(jié)尾的文件的上下文。一個函數(shù),返回一個數(shù)組,包含上下文模塊能夠處理的所有的請求。 依賴管理 Dependency Management 該條已在webpack2.x中文網(wǎng)存在,點(diǎn)擊這里 es6 modules commonjs amd 表達(dá)式...
摘要:公開路徑該條已在中文網(wǎng)存在點(diǎn)擊這里有一個非常有用的設(shè)置,允許你設(shè)置一個所有資源的基礎(chǔ)路徑在你的應(yīng)用中。使用案例這里有有些實(shí)際應(yīng)用中的案例,其中它使用的非常靈活。 公開路徑(pbulic path) 該條已在webpack2.x中文網(wǎng)存在,點(diǎn)擊這里 webpack有一個非常有用的設(shè)置,允許你設(shè)置一個所有資源的基礎(chǔ)路徑在你的應(yīng)用中。它叫做publicPath。 使用案例(Use cases...
摘要:出口影響編譯的輸出告訴怎樣編譯輸出的文件允許多個入口一個出口的情況。該選項(xiàng)實(shí)現(xiàn)跨域加載模塊可以的值是命名每個出口文件。不必明確絕對路徑。使用設(shè)置項(xiàng),設(shè)置具體位置。僅僅命名文件名字即可。 出口Output 影響編譯的輸出告訴webpack怎樣編譯輸出的文件允許多個入口一個出口的情況。 用法 const config = { output: bundle.js }; module.e...
閱讀 2331·2021-11-17 09:33
閱讀 858·2021-10-13 09:40
閱讀 586·2019-08-30 15:54
閱讀 789·2019-08-29 15:38
閱讀 2424·2019-08-28 18:15
閱讀 2487·2019-08-26 13:38
閱讀 1853·2019-08-26 13:36
閱讀 2140·2019-08-26 11:36