You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Webpack3升级至V4:CommonsChunkPlugin替换为SplitChunksPlugin适配问题

Webpack4 CommonsChunkPlugin迁移配置修复

你遇到的问题是splitChunks配置缺少必要的提取限制规则导致的,Webpack4中CommonsChunkPlugin被废弃后,splitChunks有内置的默认提取逻辑,未显式配置限制规则的情况下会命中所有模块,导致common.bundle.js包含全部入口代码。

正确适配配置

optimization: {
  splitChunks: {
    // 关闭Webpack默认的公共提取规则,避免自定义规则被覆盖
    default: false,
    defaultVendors: false,
    cacheGroups: {
      common: {
        name: 'common',
        filename: 'common.bundle.js',
        chunks: 'all',
        // 核心配置:仅提取被至少2个入口引用的模块,和旧版CommonsChunkPlugin默认逻辑一致
        minChunks: 2,
        // 调高规则优先级,确保优先命中
        priority: 10,
        // 可选:忽略默认30KB最小体积限制,小体积公共模块也会被提取
        enforce: true,
        // 可选:仅提取src下的业务公共代码,排除node_modules第三方依赖
        // test: /[\\/]src[\\/]/
      }
    }
  }
}

配置参数说明

  • minChunks: 2:控制模块被多少个入口引用才会被提取,是实现需求的核心参数,设为2即可匹配旧版CommonsChunkPlugin的默认提取逻辑
  • default: false、defaultVendors: false:关闭Webpack内置的默认提取规则,避免和自定义的common规则冲突
  • priority: 10:调高当前规则的优先级,确保优先执行自定义的公共代码提取逻辑
  • enforce: true:Webpack默认仅提取体积大于30KB的公共模块,加上该配置可以忽略体积限制,所有符合引用次数要求的模块都会被提取
  • test: /[\\/]src[\\/]/:可选配置,如果你需要单独打包第三方依赖,加上该规则可以仅提取src目录下的业务公共代码,不会把node_modules中的依赖打包进common.bundle.js

可选拓展:单独提取第三方依赖

如果你需要把node_modules中的第三方公共依赖单独打包,只需要在cacheGroups下新增一个vendors规则即可:

cacheGroups: {
  vendors: {
    name: 'vendors',
    filename: 'vendors.bundle.js',
    test: /[\\/]node_modules[\\/]/,
    chunks: 'all',
    priority: 20,
    enforce: true
  },
  common: {
    // 上文的common配置保持不变
  }
}

内容的提问来源于stack exchange,提问作者PhilipCodeX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 04:51:02