webpack之提取页面公共资源(SplitChunksPlugin)

利用SplitChunksPlugin进行公共脚本分离,Webpack4内置的,替代CommonsChunkPlugin插件。

chunks参数说明:

async:异步引入的哭进行分离(默认)

initial:同步引入的库进行分离

all:所有引入的库进行分离

minChunks:设置最小引入次数为2次

minSize:分离的包体积的大小

一、引入插件

npm i html-webpack-externals-plugin -D

二、打包公共资源

        new HtmlWebpackExternalsPlugin({
            externals: [
              {
                module: 'react',
                entry: 'https://cdn.bootcss.com/react/16.2.0/umd/react.production.min.js',
                global: 'React',
              },
              {
                module: 'react-dom',
                entry: 'https://cdn.bootcss.com/react-dom/16.2.0/umd/react-dom.production.min.js',
                global: 'ReactDOM',
              }
            ]
        })
    optimization: {
        splitChunks: {
            cacheGroups: {
                commons: {
                    test: /(react|react-dom)/,
                    name: 'vendors',
                    chunks: 'all'
                }
            }
        }
    },

此处作用是提取react和react-dom,公共部分,将他们打包入一个名为vendors的文件中

注意要在HtmlWebpackPlugin中的chunks数组中引入

        htmlWebpackPlugins.push(
            new HtmlWebpackPlugin({
                template: path.join(__dirname, `src/${pageName}/index.html`),
                filename: `${pageName}.html`,
                chunks: ['vendors', 'common', pageName], // 注意此处
                inject: true,
                minify: {
                    html5: true,
                    collapseWhitespace: true,
                    preserveLineBreaks: false,
                    minifyCSS: true,
                    minifyJS: true,
                    removeComments: false
                }
            })
        );

三、提取公共文件并打包

    optimization: {
        splitChunks: {
            minSize: 0,
            cacheGroups: {
                commons: {
                    name: 'commons',
                    chunks: 'all',
                    minChunks: 2
                }
            }
        }
    }

次配置,文件大小最小为0,至少引用两次的文件,将打包入名为commons的文件中,此处和上面一样,都需要在HtmlWebpackPlugin中的chunks数组中引入。

你可能感兴趣的:(Webpack)