修复Npm audit问题导致Angular 14项目构建失败求助
解决Angular 14中loader-utils/terser安全漏洞修复后的构建错误(Ajv is not a constructor)
问题背景
维护的Angular 14应用存在loader-utils和terser的安全漏洞,尝试过以下操作修复:
- 执行
npm audit fix --force - 安装最新版terser:
npm install terser@latest - 安装最新版loader-utils:
npm install loader-utils@latest - 在package.json添加resolutions字段锁定terser和loader-utils版本,执行
npx npm-force-resolutions
目前npm audit已无安全问题,但项目构建时抛出错误:
[error] TypeError: Ajv is not a constructor at Object.<anonymous> (C:\Projects\scenic.booking.portal.ui\node_modules\mini-css-extract-plugin\node_modules\schema-utils\dist\validate.js:66:13) at Module._compile (node:internal/modules/cjs/loader:1103:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10) at Module.load (node:internal/modules/cjs/loader:981:32) at Function.Module._load (node:internal/modules/cjs/loader:822:12) at Module.require (node:internal/modules/cjs/loader:1005:19) at require (node:internal/modules/cjs/helpers:102:18) at Object.<anonymous> (C:\Projects\scenic.booking.portal.ui\node_modules\mini-css-extract-plugin\node_modules\schema-utils\dist\index.js:6:5) at Module._compile (node:internal/modules/cjs/loader:1103:14) at Object.Module._extensions..js (node:internal/modules/cjs/loader:1157:10)
相关环境版本:
- npm: 9.1.2
- @angular-devkit/core: 14.0.1
- rxjs: 7.5.5
- typescript: 4.7.3
解决方案
1. 锁定兼容的依赖版本
错误源于mini-css-extract-plugin依赖的schema-utils与高版本Ajv不兼容(Ajv v8+改用ES模块,旧版schema-utils用CommonJS导入)。在package.json的resolutions中添加以下配置:
"resolutions": { "schema-utils": "^3.3.0", "ajv": "^6.12.6", "loader-utils": "^2.0.4", "terser": "^5.16.1" }
这些版本的优势:
- schema-utils@3.3.0 适配Angular 14构建链,稳定兼容Ajv v6
- Ajv@6.12.6 是schema-utils@3.x的指定依赖,可避免构造函数错误
- loader-utils@2.0.4 和 terser@5.16.1 已修复安全漏洞,同时兼容Angular 14
2. 重装依赖
执行以下命令清理旧依赖并重新安装:
# Linux/macOS rm -rf node_modules package-lock.json npx npm-force-resolutions npm install # Windows rmdir /s /q node_modules del package-lock.json npx npm-force-resolutions npm install
3. 验证构建
运行构建命令确认问题解决:
ng build
备选方案:升级Angular CLI核心依赖
如果上述方案无效,可升级@angular-devkit/core到14.x最新补丁版本(如14.2.10),新版本已修复依赖兼容问题:
npm install @angular-devkit/core@~14.2.0 --save-dev
完成后重新执行依赖安装和构建步骤。
内容的提问来源于stack exchange,提问作者Stephen Cossgrove
相关产品推荐
相关产品推荐

