Webpack optimization.splitChunks配置后为什么第三方库没合并?
在优化项目时,我想通过splitChunks把axios和lodash合并到同一个chunk里,但配置后它们还是分开打包。我尝试在optimization.splitChunks里设置了cacheGroups:
optimization: {
splitChunks: {
cacheGroups: {
vendors: {
test: /[\/]node_modules[\/](axios|lodash)[\/]/,
name: 'vendors-lib',
chunks: 'all',
priority: 20
}
}
}
},
打包后发现axios在vendors-lib.js里,但lodash还是单独生成了vendors~lodash.js。控制台没报错,但实际生成的chunks名称和预期不符,应该怎样调整配置才能让这两个库合并?
test的正则写法有点小问题。你看,你现在的正则是这样写的:
/[/]node_modules[/](axios|lodash)[/]/这个正则要求匹配的模块路径必须是以
/axios/或/lodash/结尾的文件夹路径,但有些情况下可能不完全符合这个规则(比如某些库的打包方式特殊)。你可以改成这样试试:
注意我把正则改成了
/[\/]node_modules[\/](axios|lodash)[\/?]/,多加了个可选的斜杠[\/]?,这样能更灵活地匹配到这两个库的所有情况。另外,前端这块有时候缓存也会捣乱,记得清理下之前的构建文件或者加个
hash确保重新生成。试完之后应该就能看到 axios 和 lodash 都合并到
vendors-lib.js里了。如果还不行,可以再检查下项目里有没有其他地方对 splitChunks 做了覆盖配置。test的正则调整一下,同时确保minSize和minChunks没有限制:有时候 Webpack 默认的
minSize会影响合并,改了应该就能正常打包到一起了。