webpack2 還沒研究好,就發現升級到4了,你咋這麼快~css
最近要作項目腳手架,項目構建準備從新作,由於以前寫的太爛了...而後發現webpack大版本已經升到4了(又去看了一眼,4.5了),這麼快的節奏,不適應啊...既然是新的,就用新的來吧,先跳過version3node
webpack4 相對於以前的版本,有很多變化,其中包括一些不向下兼容的變化。具體哪些變化這裏就不囉嗦了(4.0 changelog, 譯文),今天主要記錄一下 廢除 commonChunksPlugin
以後,怎麼使用 splitChunksPlugin
&& runtimeChunkPlugin
webpack
只記錄到本身瞭解到的部分,不按期更新吧git
splitChunksPlugin 默認配置項
:github
{ "chunks": "all", "minSize": 0, "misChunks": 1, "maxAsyncRequests": 1, "maxInitialRequests": 1, "name": undefined, "automaticNameDelimiter": "~", "filename": undefined, "cacheGroups": {} }
稍微來解釋下各項配置:web
cacheGroups配置項:
json
[key]: { "priority": "緩存優先級權重", "name": "split 出來的 chunk 的名字", "chunks": "應該用範圍", "enforce": "未知", "minSize": "最小尺寸", "minChunks": "最小chunks", "maxAsyncRequests": "", "maxInitialRequests": "", "filename": "最後output的文件名", "reuseExistingChunk": "未知" }
"runtimeChunk": { "name": "manifest" }
用不着的屬性就不配置了,須要關聯到 output 和 ExtractTextPlugin 配置緩存
webpackConf: { ..., output: { path: path.join(process.cwd(), 'dist'), publicPath, filename: '[name].js', chunkFilename: '[name].js' }, optimization: { splitChunks: { chunks: 'initial', // 只對入口文件處理 cacheGroups: { vendor: { // split `node_modules`目錄下被打包的代碼到 `page/vendor.js && .css` 沒找到可打包文件的話,則沒有。css須要依賴 `ExtractTextPlugin` test: /node_modules\//, name: 'page/vendor', priority: 10, enforce: true }, commons: { // split `common`和`components`目錄下被打包的代碼到`page/commons.js && .css` test: /common\/|components\//, name: 'page/commons', priority: 10, enforce: true } } }, runtimeChunk: { name: 'page/manifest' } }, plugins: [ new ExtractTextPlugin({ filename: '[name].css', ignoreOrder: true }), ... ] ... }
若是沒有css文件,說明對應目錄下沒有相關css資源引用,或者未使用ExtractTextPlugin
dist
└── page
├── [commons.css]
├── commons.js
├── [manifest.css]
├── manifest.js
├── [vendor.css]
├── vendor.js
└── demo // entry 中 配置
├── index.css
└── index.js
```異步
上邊的例子是用的 optimization
配置項形式,你也能夠用 plugin
形式,配置參數應該同樣的。async
以前搜索相關的配置,介紹的文章較少,有一些簡單的demo,但總以爲不受用。
參考了很多文章,而後又大概讀了 webpack
的 splitChunksPlugin
的源碼,去了解了下都有哪些參數,看源碼挺好
********************************** done **********************************