webpack4 廢除了CommonsChunkPlugin 引入了 optimization.splitChunksjavascript
若是在webpack4中使用了weppack3的CommonsChunkPlugin 會出現如下報錯:java
(運行配置文件 webpack3.config.js)Error: webpack.optimize.CommonsChunkPlugin has been removed, please use config.optimization.splitChunkswebpack
將一個文件分割成多個文件:由於瀏覽器會緩存你的代碼,每當你對某一文件作點改變,訪問你站點的人們就要從新下載它,包括依賴。若是你將(這些依賴)分離成單獨的文件,訪問者就無需屢次重複下載它們了。web
使用webpack生成一個或多個包含你源代碼最終版本的「打包好的文件」(bundles),(概念上咱們看成)它們由(一個一個的)chunks組成。瀏覽器
做用:緩存
提取公用代碼,減小代碼的冗餘,異步
提升用戶的加載速度async
單頁面減小下載,多頁面可使用緩存優化
module.exports = {
//...
optimization: {
splitChunks: {
chunks: 'async',
minSize: 30000,
minChunks: 1,
maxAsyncRequests: 5,
maxInitialRequests: 3,
automaticNameDelimiter: '~',
name: true,
cacheGroups: {}
}
}
}
複製代碼
chunks
: 表示哪些代碼須要優化,有三個可選值:initial(初始塊)、async(按需加載塊)、all(所有塊),默認爲asyncminSize
: 表示在壓縮前的最小模塊大小,默認爲30000minChunks
: 表示被引用次數,默認爲1maxInitialRequests
: 一個入口最大的並行請求數,默認爲3automaticNameDelimiter
: 命名鏈接符name
: 拆分出來塊的名字,默認由塊名和hash值自動生成cacheGroups
: 緩存組。緩存組的屬性除上面全部屬性外,還有test, priority, reuseExistingChunk
test
: 用於控制哪些模塊被這個緩存組匹配到priority
: 緩存組打包的前後優先級reuseExistingChunk
: 若是當前代碼塊包含的模塊已經有了,就不在產生一個新的代碼塊注意:
initial
模式下會把異步和非異步模塊分開打包。而all
會把異步和非異步同時進行打包。也就是說moduleA在indexA中異步引入,indexB中同步引入,initial
下moduleA會出如今兩個打包塊中,而all
只會出現一個。ui