美文网首页
SplitChunksPlugin

SplitChunksPlugin

作者: 撑船的摆渡人 | 来源:发表于2019-10-17 18:49 被阅读0次

    防止重复(prevent duplication)

    CommonsChunkPlugin 插件可以将公共的依赖模块提取到已有的入口 chunk 中,或者提取到一个新生成的 chunk。让我们使用这个插件,将之前的示例中重复的 lodash 模块去除:

    webpack.config.js

      const path = require('path');
      const webpack = require('webpack');
      const HTMLWebpackPlugin = require('html-webpack-plugin');
    
      module.exports = {
        entry: {
          index: './src/index.js',
          another: './src/another-module.js'
        },
        plugins: [
          new HTMLWebpackPlugin({
            title: 'Code Splitting'
          }),
          new webpack.optimize.CommonsChunkPlugin({
            name: 'common' // 指定公共 bundle 的名称。
          })
        ],
        output: {
          filename: '[name].bundle.js',
          path: path.resolve(__dirname, 'dist')
        }
      };
    
    

    这里我们使用 CommonsChunkPlugin 之后,现在应该可以看出,index.bundle.js 中已经移除了重复的依赖模块。需要注意的是,CommonsChunkPlugin 插件将 lodash 分离到单独的 chunk,并且将其从 main bundle 中移除,减轻了大小。

    但CommonsChunkPlugin于4.0及以后被移除,使用SplitChunksPlugin替代。

    optimization.splitChunks

    此配置对象表示的默认行为SplitChunksPlugin

    webpack.config.js

    module.exports = {
      //...
      optimization: {
        splitChunks: {
          chunks: 'async',
          minSize: 30000,
          maxSize: 0,
          minChunks: 1,
          maxAsyncRequests: 5,
          maxInitialRequests: 3,
          automaticNameDelimiter: '~',
          automaticNameMaxLength: 30,
          name: true,
          cacheGroups: {
            vendors: {
              test: /[\\/]node_modules[\\/]/,
              priority: -10
            },
            default: {
              minChunks: 2,
              priority: -20,
              reuseExistingChunk: true
            }
          }
        }
      }
    };
    

    把这重复的模块抽出来,称为common chunk,余下的部分直接称作 单独的 chunk。即此时会有多个chunk。
    单页面应用中异步加载,或者单纯想分离出不变的第三方库,均可采用该手段进行优化。

    相关文章

      网友评论

          本文标题:SplitChunksPlugin

          本文链接:https://www.haomeiwen.com/subject/bvnsyctx.html