SpiltChunks
Split Chunks 有诸多优点,例如有利于缓存命中、有利于运行时的持久化文件缓存等。其中有一类情况能提升后续环节的工作效率,即通过分包来抽离多个入口点引用的公共依赖。
大模块不提取,重复打包,影响较大
optimization: {
splitChunks: {
// 自动提取所有公共模块到单独 bundle
chunks: "all";
}
}除此之外,splitChunks 还支持很多高级的用法,可以实现各种各样的分包策略,这些我们可以在 文档 中找到对应的介绍。
vue 配置
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
name: 'chunk-vendors',
test: /[\\\/
]node_modules[\\\/
]/,
priority: -10,
chunks: 'initial'
},
common: {
name: 'chunk-common',
minChunks: 2,
priority: -20,
chunks: 'initial',
reuseExistingChunk: true
}
}
},
minimizer: [
{
options: {
test: /\.m?js(\?.*)?$/i,
chunkFilter: () => true,
warningsFilter: () => true,
extractComments: false,
sourceMap: true,
cache: true,
cacheKeys: defaultCacheKeys => defaultCacheKeys,
parallel: true,
include: undefined,
exclude: undefined,
minify: undefined,
terserOptions: {
compress: {
arrows: false,
collapse_vars: false,
comparisons: false,
computed_props: false,
hoist_funs: false,
hoist_props: false,
hoist_vars: false,
inline: false,
loops: false,
negate_iife: false,
properties: false,
reduce_funcs: false,
reduce_vars: false,
switches: false,
toplevel: false,
typeofs: false,
booleans: true,
if_return: true,
sequences: true,
unused: true,
conditionals: true,
dead_code: true,
evaluate: true
},
mangle: {
safari10: true
}
}
}
}
]
},为什么拆包可以加速
因为我们页面一般都做了缓存,而我们代码一般都是增量更新,所以当页面颗粒度拆的足够小时,大部分资源都是直接命中缓存 304,只有更新的这个文件需要重新请求,而这个包拆分的粒度就是请求节省的时间。