利用 SplitChunksPlugin 优化
- 公共依赖提取:通过
splitChunks.chunks
设置为 all
,splitChunks.name
可以指定公共依赖打包后的文件名(如 commons
),splitChunks.minChunks
设置为 2 或更高(取决于入口数量,确保至少有两个入口依赖该模块才提取)。这样公共依赖会被提取到一个单独的文件中,只打包一次。例如:
module.exports = {
optimization: {
splitChunks: {
chunks: 'all',
name: 'commons',
minChunks: 2
}
}
};
- 处理特定依赖:对于每个入口的特定依赖,无需额外特殊配置 SplitChunksPlugin。Webpack 会根据入口文件的
import
语句,将入口特定的依赖打包到对应的入口文件或其异步 chunk 中。
不同配置策略影响
minSize
:
- 打包结果:设置
minSize
可控制被提取出来的 chunk 的最小大小。如果设置过小,可能会导致过多的小文件被提取,增加请求数量;如果设置过大,一些较小的公共模块可能不会被提取到公共 chunk 中。
- 性能影响:过小的
minSize
会增加网络请求开销,因为浏览器需要发起更多请求来获取这些小文件;过大的 minSize
可能无法充分利用公共 chunk 的优势,导致重复代码在多个入口中出现,增加整体打包体积。
maxSize
:
- 打包结果:
maxSize
会尝试将提取出的 chunk 分割成更小的部分,以满足设置的最大大小。这可能会使公共 chunk 被分割成多个文件。
- 性能影响:合理设置
maxSize
可以平衡单个文件大小和请求数量,有助于在不同网络环境下提高加载性能。如果设置不合理,可能导致过多分割,增加请求开销,或者分割不足,导致文件过大加载缓慢。
cacheGroups
:
- 打包结果:可以通过
cacheGroups
进一步细分公共依赖的提取规则。例如,可以针对不同类型的模块(如 node_modules
中的库)设置不同的提取策略。
- 性能影响:通过精细的
cacheGroups
配置,可以更有效地组织打包内容,减少不必要的重复,提高缓存利用率,从而提升性能。但过度复杂的配置可能增加维护成本。