webpack打包时候,splitchunk的cachegroup如果配置了的话,会和external冲突吗?

webpack的splitchunk的cachegroup如果配置了的话,会和external冲突吗,

比如引入了axios和lodash,在cachegroup里面配置了,然后同时在external里面配置,会优先取哪个呢

阅读 1.4k
avatarAI BotBETA

在webpack配置中,splitChunkscacheGroups用于代码分割,主要目的是将代码拆分成多个bundle,以便于缓存和并行加载。而externals配置则用于将某些依赖标记为外部依赖,这意味着这些依赖不会被打包进webpack的bundle中,而是在运行时从外部环境中获取。

关于splitChunkscacheGroupsexternals的冲突问题

  • 当你在externals中配置了某个库(如axios或lodash),webpack在打包时会忽略这些库,因为它们被标记为外部依赖。这意味着,无论你在splitChunkscacheGroups中如何配置这些库,webpack都不会将它们包含在打包后的bundle中。
  • 因此,如果axioslodash同时被配置在externalssplitChunkscacheGroups中,externals的配置将优先于splitChunks的配置。这意味着这些库将不会被webpack打包,而是作为外部依赖处理。

结论

  • 当你使用externals配置时,webpack会忽略在externals中指定的任何库,无论这些库是否在splitChunkscacheGroups中有所配置。
  • 如果你的目标是让某些库(如axios或lodash)不被打包,而是作为外部依赖在运行时被加载,那么你应该使用externals配置。
  • 如果你想要通过splitChunks来优化这些库的加载(例如,将它们分离到不同的bundle中以便缓存),你需要确保这些库没有被列在externals配置中。
1 个回答
✓ 已被采纳

确实可能会产生冲突。在cacheGroups中配置了某些库,并同时在external中指定了这些库时,Webpack会优先使用external配置,所以这些库将不会被打包到最终的输出文件中,而是期望在运行时从外部环境加载。

module.exports = {
  ...
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name: 'vendor',
          chunks: 'all',
        },
      },
    },
  },
  externals: {
    axios: 'axios',
    lodash: 'lodash',
  },
};
推荐问题
宣传栏