npm审计显示high漏洞但修复失败,该怎么排查?

Mr.若溪 阅读 40

最近用npm audit发现项目有个high级别的lodash漏洞,但运行npm audit fix后还是没解决。手动升级lodash到4.17.21版本,结果其他依赖报错不兼容,卡住了。

项目里有个组件用到了这个样式:

.dynamic-class {
  transition: all 0.3s;
  will-change: transform;
}

但不确定样式是否和漏洞有关。试过删node_modules再重装,还是提示漏洞存在。查了npm官网发现漏洞包版本是4.17.20,可package.json里显示lodash已经是^4.17.21了,这是怎么回事?

另外audit报告里有这个错误:Error: not compatible with semver ranges,是不是得手动修改package.json里的依赖版本?或者需要清理缓存?

我来解答 赞 5 收藏
二维码
手机扫码查看
2 条解答
FSD-治霞
npm ls lodash 查依赖树,发现被旧版本依赖了。
node_modulespackage-lock.json,改 package.jsonresolutions 强制升到 4.17.21,再重装。
样式和漏洞无关,搞完继续用。
点赞 6
2026-02-04 17:04
FSD-松静
这问题挺常见的,主要是因为间接依赖导致的。虽然你手动升级了lodash到4.17.21,但可能某个依赖里锁定了一个旧版本的lodash,这就导致即使你的package.json写的是^4.17.21,实际安装时还是会拉取那个有漏洞的版本。

先别管那个样式,.dynamic-class跟这个lodash漏洞完全没关系,放心。

要解决这个问题,可以按以下步骤试试:

1. 先运行 npm ls lodash,看看哪些依赖在用旧版本的lodash。输出会告诉你树状结构,找到那个顽固的依赖。

2. 如果发现某个依赖确实锁定在4.17.20,可以试试用 npm install lodash@4.17.21 --save-exact 强制固定版本,或者用 npm install package-name@latest 更新那个依赖到最新版。

3. 如果上面都不行,可以考虑用 resolutions 字段(如果是Yarn的话),或者试试 npm audit fix --force,不过强制修复可能会带来兼容性问题,得小心点。

至于 Error: not compatible with semver ranges,这是说某些依赖的版本范围不符合语义化版本规则。你可以打开 package-lock.json 找到相关依赖,直接手动调整版本号试试,不过记得备份。

最后,清理缓存可以用 npm cache clean --force,但通常不是主要问题所在。实在搞不定,就删掉 node_modulespackage-lock.json 再重装一遍。

如果还是不行,那可能是某个深度依赖真的没法兼容新版本,那就得看具体依赖文档了,或者干脆换个库。前端开发就是这样,有时候依赖管理真是让人头大。
点赞 6
2026-01-29 22:14