构建含Swagger UI项目时frontend-maven-plugin执行npm目标失败
问题根因
核心报错是webpack无法解析swagger-ui的产物文件中的新语法,你没有改动配置却突然报错的常见原因如下:
- 依赖版本自动升级:如果你的package.json中swagger-ui的版本配置是带
^/~的范围版本,每次构建重新安装依赖时会拉取符合范围的最新版本,近期swagger-ui v4及以上版本的打包产物使用了ES2020+的新语法,旧版运行环境无法识别。之前构建正常是因为当时拉取的swagger-ui旧版本产物做了全量ES5语法兼容,不需要额外转译。 - babel/webpack配置覆盖不足:你现有的webpack loader配置默认不会转译node_modules目录下的依赖,新版swagger-ui的产物没有做全量ES5转译,就会触发语法解析失败的报错。
- 依赖锁文件被改动:如果项目的package-lock.json/yarn.lock被覆盖或修改,会导致实际安装的swagger-ui版本和之前正常构建的版本不一致,也会触发该问题。
你使用的frontend-maven-plugin本身没有问题,报错只是因为插件调用npm run build命令时,前端构建环节返回了错误码2。
解决方案
你可以根据自己的项目需求选择任意一种方案修复:
- 固定swagger-ui版本:将package.json中swagger-ui的版本号改为固定版本(去掉开头的
^/~),推荐直接指定之前正常运行的旧版本,比如"swagger-ui": "3.52.5",删除node_modules目录和依赖锁文件后重新构建即可。 - 调整webpack转译规则:如果你需要使用新版swagger-ui,修改webpack配置中babel-loader的排除规则,将swagger-ui纳入转译范围,示例配置如下:
module: { rules: [ { test: /\.js$/, // 排除node_modules目录,但保留swagger-ui需要转译 exclude: /node_modules(?!\/swagger-ui)/, use: ['babel-loader'] } ] }
- 升级webpack版本:如果你的项目webpack版本低于5,升级到webpack 5即可原生支持更多ES新语法,无需额外配置就能兼容新版swagger-ui的产物。
内容的提问来源于stack exchange,提问作者acm
相关产品推荐
相关产品推荐

