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

Yarn 3升级后执行yarn build遇Compilation类型错误求助

升级Yarn 1到Yarn 3后Webpack构建出现Compilation类型错误的排查求助

我已经断断续续研究这个问题几天了,仍未找到可行的解决方向。

正尝试将公司的Monorepo从Yarn 1.22升级到Yarn 3,目的是提升依赖安装速度。Yarn官方迁移步骤很简单,但我们的Monorepo包含大量构建流程,问题仅在升级后出现。

我们的Monorepo包含多个前端项目,有统一工具管理构建和测试流程。问题已定位到yarn build步骤,执行该命令时触发如下错误:

TypeError: The 'compilation' argument must be an instance of Compilation
    at Function.getCompilationHooks (/Users/myuser/workspace/monorepo/web/tools/webpack/node_modules/webpack/lib/javascript/JavascriptModulesPlugin.js:151:10)
    at SourceMapDevToolModuleOptionsPlugin.apply (/Users/myuser/workspace/monorepo/web/tools/webpack/node_modules/webpack/lib/SourceMapDevToolModuleOptionsPlugin.js:50:27)
    at /Users/myuser/workspace/monorepo/web/tools/webpack/node_modules/webpack/lib/SourceMapDevToolPlugin.js:183:53
    at Hook.eval [as call] (eval at create (/Users/myuser/workspace/monorepo/node_modules/webpack/node_modules/tapable/lib/HookCodeFactory.js:19:10), <anonymous>:102:1)
    at Hook.CALL_DELEGATE [as _call] (/Users/myuser/workspace/monorepo/node_modules/webpack/node_modules/tapable/lib/Hook.js:14:14)
    at Compiler.newCompilation (/Users/myuser/workspace/monorepo/node_modules/webpack/lib/Compiler.js:1124:26)
    at /Users/myuser/workspace/monorepo/node_modules/webpack/lib/Compiler.js:1168:29
    at Hook.eval [as callAsync] (eval at create (/Users/myuser/workspace/monorepo/node_modules/webpack/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
    at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/Users/myuser/workspace/monorepo/node_modules/webpack/node_modules/tapable/lib/Hook.js:18:14)
    at Compiler.compile (/Users/myuser/workspace/monorepo/node_modules/webpack/lib/Compiler.js:1163:28)

查阅资料后得知这类问题可能源于Node安装问题或多版本Webpack共存。我已执行以下排查操作:

  • 清理nvm缓存
  • 清理Yarn缓存
  • 删除Monorepo中所有node_modules文件夹并重新安装依赖

但问题仍未解决。暂未尝试重新安装Node,不认为这能解决问题。

随后我同步了项目中所有依赖的Webpack版本至webpack@5.86.0,执行yarn why webpack的输出如下:

yarn why webpack
├─ @monorepo/ui-react@workspace:web/packages/ui-react [3e9d5]
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
├─ @monorepo/ui-react@workspace:web/packages/ui-react [6105e]
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
├─ @monorepo/ui-react@workspace:web/packages/ui-react [85f66]
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
├─ @monorepo/ui-react@workspace:web/packages/ui-react [bf190]
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
├─ @monorepo/ui-react@workspace:web/packages/ui-react
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
├─ @monorepo/webpack@workspace:web/tools/webpack
│  └─ webpack@npm:5.86.0 [b35f9] (via npm:^5.86.0 [b35f9])
│
├─ react-scripts@npm:5.0.1
│  └─ webpack@npm:5.86.0 (via npm:^5.64.4)
│
├─ react-scripts@npm:5.0.1 [d10d4]
│  └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])
│
└─ react-scripts@npm:5.0.1 [dc2b7]
   └─ webpack@npm:5.86.0 [dc2b7] (via npm:^5.86.0 [dc2b7])

虽然所有依赖的Webpack版本一致,但不确定yarn build是否仍在调用多版本Webpack。

接着排查Webpack配置,发现错误源于SourceMapDevToolPlugin。当我从Webpack工具的config.js中移除该插件时,构建可以成功完成:

// 被移除的代码
new webpack.SourceMapDevToolPlugin({
      noSources: false,
      filename: '[name].[fullhash].js.map',
}),

由于我们的日志工具需要该插件生成的Source Map,我并不想移除它。目前陷入瓶颈,不知如何在保留该插件的前提下解决这个Compilation类型错误。Yarn 3存在一些差异,我不确定该投入时间到哪个方向。另外,我们在根目录package.json中为Webpack工具设置了nohoist,但该特性已被废弃,暂时不认为它会导致问题。恳请各位提供解决思路或建议。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 11:44:54