Webpack optimization.splitChunks配置后为什么第三方库没合并?

丽君🍀 阅读 38

在优化项目时,我想通过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名称和预期不符,应该怎样调整配置才能让这两个库合并?

我来解答 赞 7 收藏
二维码
手机扫码查看
2 条解答
长孙振岚
这个问题有点意思。你现在的配置看着没啥大问题,但为啥会分开打包呢?主要是因为 test 的正则写法有点小问题。

你看,你现在的正则是这样写的:
/[/]node_modules[/](axios|lodash)[/]/
这个正则要求匹配的模块路径必须是以 /axios//lodash/ 结尾的文件夹路径,但有些情况下可能不完全符合这个规则(比如某些库的打包方式特殊)。

你可以改成这样试试:

optimization: {
splitChunks: {
cacheGroups: {
vendors: {
test: /[\/]node_modules[\/](axios|lodash)[\/]?/, // 改了这里
name: 'vendors-lib',
chunks: 'all',
priority: 20
}
}
}
}


注意我把正则改成了 /[\/]node_modules[\/](axios|lodash)[\/?]/,多加了个可选的斜杠 [\/]?,这样能更灵活地匹配到这两个库的所有情况。

另外,前端这块有时候缓存也会捣乱,记得清理下之前的构建文件或者加个 hash 确保重新生成。

试完之后应该就能看到 axios 和 lodash 都合并到 vendors-lib.js 里了。如果还不行,可以再检查下项目里有没有其他地方对 splitChunks 做了覆盖配置。
点赞 3
2026-02-02 10:06
依依 Dev
改成这样,把 test 的正则调整一下,同时确保 minSizeminChunks 没有限制:

optimization: {
splitChunks: {
cacheGroups: {
vendors: {
test: /[\/]node_modules[\/](axios|lodash)[\/]/,
name: 'vendors-lib',
chunks: 'all',
priority: 20,
minChunks: 1,
minSize: 0
}
}
}
}


有时候 Webpack 默认的 minSize 会影响合并,改了应该就能正常打包到一起了。
点赞 1
2026-01-30 21:26