npm审计显示high漏洞但修复失败,该怎么排查?
最近用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里的依赖版本?或者需要清理缓存?
npm ls lodash查依赖树,发现被旧版本依赖了。删
node_modules和package-lock.json,改package.json加resolutions强制升到 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_modules和package-lock.json再重装一遍。如果还是不行,那可能是某个深度依赖真的没法兼容新版本,那就得看具体依赖文档了,或者干脆换个库。前端开发就是这样,有时候依赖管理真是让人头大。