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

升级Vaadin 8到14时Webpack因缺失terser模块启动失败求助

Vaadin 8升级至14时Webpack因缺失terser模块报错

环境与报错详情

正在将Vaadin 7应用逐步升级至Vaadin 24,当前处于Vaadin 8到14的升级阶段,使用npm版本6.14.10。启动应用时Webpack报错,导致访问UI时抛出java.lang.IllegalStateException: Webpack exited prematurely异常,具体错误日志如下:

Webpack failed with the exception:
internal/modules/cjs/loader.js:883
  throw err;
  ^

Error: Cannot find module 'terser'
Require stack:
- C:\...\my-app\node_modules\webpack-babel-multi-target-plugin\dist\src\safari-nomodule-fix\safari.nomodule.fix.plugin.js
- C:\...\my-app\node_modules\webpack-babel-multi-target-plugin\dist\src\babel.multi.target.plugin.js
- C:\...\my-app\node_modules\webpack-babel-multi-target-plugin\dist\index.js
- C:\...\my-app\webpack.generated.js
- C:\...\my-app\webpack.config.js
- C:\...\my-app\node_modules\webpack-cli\bin\utils\convert-argv.js
- C:\...\my-app\node_modules\webpack-dev-server\bin\webpack-dev-server.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
    at Function.Module._load (internal/modules/cjs/loader.js:725:27)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (C:\...\my-app\node_modules\webpack-babel-multi-target-plugin\dist\src\safari-nomodule-fix\safari.nomodule.fix.plugin.js:14:16)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14)
    at Module.require (internal/modules/cjs/loader.js:952:19)
    at require (internal/modules/cjs/helpers.js:88:18)
    at Object.<anonymous> (C:\...\my-app\node_modules\webpack-babel-multi-target-plugin\dist\src\babel.multi.target.plugin.js:9:38)
    at Module._compile (internal/modules/cjs/loader.js:1063:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
    at Module.load (internal/modules/cjs/loader.js:928:32)
    at Function.Module._load (internal/modules/cjs/loader.js:769:14) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\...\\my-app\\node_modules\\webpack-babel-multi-target-plugin\\dist\\src\\safari-nomodule-fix\\safari.nomodule.fix.plugin.js',
    'C:\\...\\my-app\\node_modules\\webpack-babel-multi-target-plugin\\dist\\src\\babel.multi.target.plugin.js',
    'C:\\...\\my-app\\node_modules\\webpack-babel-multi-target-plugin\\dist\\index.js',
    'C:\\...\\my-app\\webpack.generated.js',
    'C:\\...\\my-app\\webpack.config.js',
    'C:\\...\\my-app\\node_modules\\webpack-cli\\bin\\utils\\convert-argv.js',
    'C:\\...\\my-app\\node_modules\\webpack-dev-server\\bin\\webpack-dev-server.js'
  ]
}

同时应用日志中存在npm警告:

npm WARN webpack-babel-multi-target-plugin@2.5.0 requires a peer of terser@>=3.12.0 but none is installed. You must install peer dependencies yourself.

已尝试但无效的解决方案

  • 删除.vaadin目录内容
  • 删除node_modules目录内容
  • 升级至Vaadin 14最新版本(14.11.2)并使用Gradle重建项目
  • 执行npm install --save-dev "terser@>=3.12.0"
  • 执行npm install --legacy-peer-deps
  • 手动在package.json中添加terser依赖(分别尝试dependencies和devDependencies)

额外可行解决方案

  • 锁定terser具体兼容版本:执行npm install --save-dev terser@4.8.0,该版本与webpack-babel-multi-target-plugin@2.5.0兼容性更稳定,避免版本范围匹配问题
  • 清理npm缓存后重装:先执行npm cache clean --force清空缓存,再删除node_modules和package-lock.json,最后重新执行npm install
  • 检查并调整Webpack配置:查看webpack.generated.js是否存在异常引用,或在webpack.config.js中显式配置terser-webpack-plugin,确保模块能被正确识别
  • 切换适配的npm版本:尝试升级npm到7.x版本(如7.24.0),该版本对peer依赖的处理逻辑更适配Vaadin 14的依赖体系,升级后重新安装依赖
  • 检查.npmrc配置:查看项目根目录的.npmrc文件,若存在strict-peer-deps或异常registry配置,临时注释后重新执行依赖安装
  • 用Gradle深度清理缓存:执行./gradlew vaadinClean清理Vaadin相关构建缓存,再执行./gradlew build --refresh-dependencies强制刷新所有依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:54:54