利用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数组中引入。