Angular项目高/中度显式依赖漏洞无法自动修复该如何手动处理?
问题根因分析
所有报错的漏洞链路最终都指向低于13.0.0版本的@angular-devkit/build-angular,该版本的Angular构建工具依赖了存在安全漏洞的webpack-dev-server@<=4.1.0,npm audit fix会自动尝试升级存在漏洞的子依赖,但Angular官方构建工具的依赖是强版本绑定的,非兼容的子依赖版本升级会直接导致项目启动失败。
你提到的「使用最新版本Angular」大概率是全局Angular CLI版本为最新,实际项目本地依赖的Angular核心版本为12及以下,可执行ng version命令查看项目本地的Angular版本确认。
解决步骤
第一步:先恢复项目可运行状态
如果你有Git版本管理,直接将package.json和package-lock.json回退到执行npm audit fix之前的提交,再执行npm install恢复依赖即可。
如果没有版本备份,直接删除项目根目录下的node_modules文件夹、package-lock.json文件,再执行npm install重装原有版本依赖。
第二步:修复漏洞+解决启动问题,二选一即可
方案1:升级Angular到13+版本(推荐)
Angular 13及以上版本的官方构建工具已经将webpack-dev-server升级到了无该系列漏洞的版本,执行以下命令升级即可:
ng update @angular/core @angular/cli
如果跨大版本升级(比如从11升到14),建议按照官方版本序列逐步升级,避免出现兼容问题。
方案2:不升级Angular版本,强制固定子依赖版本
如果你需要保留当前Angular版本,使用npm的overrides功能(要求npm版本>=8.0.0)强制将有漏洞的子依赖替换为安全版本即可:
- 在项目根目录的
package.json中新增overrides字段:
{ "name": "你的项目名", "version": "x.x.x", // 原有配置保持不变,新增下面的overrides字段 "overrides": { "ansi-html": "npm:ansi-html-community@^0.0.8", "ansi-regex": "^5.0.1", "glob-parent": "^5.1.2", "set-value": "^4.1.0", "webpack-dev-server": "^4.15.1" } }
- 删除
node_modules文件夹和package-lock.json文件,重新执行npm install安装依赖即可。
注意事项
- 日常开发中不要随意对框架脚手架生成的项目执行
npm audit fix,大部分底层子依赖漏洞不会影响本地开发和生产运行,强制升级反而容易出现版本兼容问题 - 如果要处理子依赖漏洞,优先用
overrides固定安全版本,或升级对应上层官方依赖
内容的提问来源于stack exchange,提问作者franfonse
相关产品推荐
相关产品推荐

