webpack4 splitChunksPlugin && runtimeChunkPlugin 配置雜記


webpack2 還沒研究好,就發現升級到4了,你咋這么快~

最近要做項目腳手架,項目構建准備重新做,因為之前寫的太爛了...然后發現webpack大版本已經升到4了(又去看了一眼,4.5了),這么快的節奏,不適應啊...既然是新的,就用新的來吧,先跳過version3

webpack4 相對於之前的版本,有不少變化,其中包括一些不向下兼容的變化。具體哪些變化這里就不啰嗦了(4.0 changelog譯文),今天主要記錄一下 廢除 commonChunksPlugin 之后,怎么使用 splitChunksPlugin && runtimeChunkPlugin

只記錄到自己了解到的部分,不定期更新吧

splitChunksPlugin

splitChunksPlugin 默認配置項

{
    "chunks": "all",
    "minSize": 0,
    "misChunks": 1,
    "maxAsyncRequests": 1,
    "maxInitialRequests": 1,
    "name": undefined,
    "automaticNameDelimiter": "~",
    "filename": undefined,
    "cacheGroups": {}
}

稍微來解釋下各項配置:

  • chunks: all, async, initial 三選一, 插件作用的chunks范圍
  • minSize: 最小尺寸
  • misChunks:最小chunks
  • maxAsyncRequests: 最大異步請求chunks
  • maxInitialRequests: 最大初始化chunks
  • name: split 的 chunks name
  • automaticNameDelimiter: 如果不指定name,自動生成name的分隔符(‘runtime~[name]’)
  • filename: ''
  • cacheGroups: 字面意思緩存組,主要配置在這里

cacheGroups配置項:

[key]: {
    "priority": "緩存優先級權重",
    "name": "split 出來的 chunk 的名字",
    "chunks": "應該用范圍",
    "enforce": "未知",
    "minSize": "最小尺寸",
    "minChunks": "最小chunks",
    "maxAsyncRequests": "",
    "maxInitialRequests": "",
    "filename": "最后output的文件名",
    "reuseExistingChunk": "未知"
}

runtimeChunkPlugin

"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 形式,配置參數應該一樣的。

之前搜索相關的配置,介紹的文章較少,有一些簡單的demo,但總覺得不受用。
參考了不少文章,然后又大概讀了 webpacksplitChunksPlugin 的源碼,去了解了下都有哪些參數,看源碼挺好


********************************** done **********************************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM