如果一个较大的项目,把打包结果放在一个文件中,文件会比较大,这时可以拆分到多个文件。代码拆分需要指定输出名称。
多入口文件拆分
entry: {
// 方式一:会输出到两个文件,第三方包的代码会包含在里面
main1: './src/main1.js',
main2: './src/main2.js'
// 方式二:会输出到两个文件和一个第三方包的文件
// main1: { import: './src/main1.js', dependOn: 'shared' },
// main2: { import: './src/main2.js', dependOn: 'shared' },
// shared: ['lodash', 'jquery']
},
output: {
filename: 'js/[name].build.js',
path: resolveApp('./dist')
},
optimization: {
minimizer: [
new TerserPlugin({
extractComments: false,
}), // 压缩JS
],
},
单入口文件
entry: './src/index.js',
output: {
filename: 'js/[name].build.js',
path: resolveApp('./dist')
},
optimization: {
minimizer: [
new TerserPlugin({
extractComments: false,
}),
],
splitChunks: {
chunks: 'all'
} // 提取所有第三方包到单独的文件
},
splitchunks 配置
chunks:默认值是 ‘async’ ,即把异步导入的包提取出来,’initial’ 把同步导入的包提取出来,’all’ 把所有导入的包提取出来。
minSize:默认值是20000,如果导入的第三方提取出来的文件大小小于该值,则不会进行拆包。
maxSize:默认值是0,导入的第三方包拆分出来的文件大小不能小于该值。如果设置了minSize,那么该值最小要等于minSize。
minChunks:默认值是1,一个包被引用的次数大于等于该值才会进行拆包。如果设置了minChunks 则不应设置 minSize 和 maxSize,否则无法起效。
cacheGroups:设置该值可以把包输出到一个文件。可以设置多个打包规则和一个默认的打包规则,根据优先度的大小使用相应的打包规则。
splitChunks: {
cacheGroups: {
svgVendor: {
test: /[\\]node_modules[\\]/,
filename: 'js/[id]_vendor.js',
priority: -10,
}, // 规则一:把node_modules 下的包输出到一个文件。优先度 -10
default: {
minChunks: 2,
filename: 'js/ccc_[id].js',
priority: -20,
} // 默认的打包规则,应该把优先度 priority 设置小一点
}
}
import 动态导入配置
异步导入的包,webpack 会自动拆包,不用配置 splitChunks,通过魔法注释、配置 output 的 chunkFilename 属性,optimization的 chunkIds 属性等手段,可以对拆包的文件重命名。
runtimeChunk
optimization 的 runtimeChunk 属性在用来配置是否生成一个入口文件的运行时文件。导入的包保存到运行时文件,入口文件导入运行时文件,当导入的包变化,入口文件不会变化,有利于长期缓存。设置为 true 开启功能。