npm audit 报高危漏洞,但升级依赖后项目就报错怎么办?
我用 npm audit 扫描项目,发现 lodash 有个高危漏洞,提示要升级到 4.17.21 以上。可我升级完之后,页面直接白屏,控制台报错说某个方法 undefined。
之前用的是 4.17.20,代码里就这么用的:
import _ from 'lodash';
const data = { a: { b: null } };
const value = _.get(data, 'a.b.c', 'default');
console.log(value); // 期望输出 'default'
现在升级后这段代码就出问题了,是不是新版改了 API?还是我哪里没配对?
_.get处理 null/undefined 的方式变了,老版本会把 null 当成普通值处理,新版会直接返回 undefined。复制这个修改方案就行:
或者降级回 4.17.20 也行,不过建议还是用新方案,毕竟安全更新还是得跟上的。
查了下 lodash 的 changelog,这个改动是故意的,他们觉得 null 就该被当成 undefined 处理。改完就好了,别问我为什么,问就是 lodash 的锅。
先用
npm ls lodash检查下是不是有其他依赖还在用旧版本,有时候多个版本混在一起就会出问题。如果是这种情况,可以这样处理:关于API变更的问题,从4.17.20到4.17.21
_.get的行为确实有调整。新版对null值处理更严格了,你代码里的data.a.b是null,所以新版会直接返回null而不是继续找'c'。安全提示:升级依赖时一定要先在测试环境验证,特别是像lodash这种基础库。我上次没测试直接上生产,半夜被报警叫醒修bug...
修复代码可以这样写:
或者直接用可选链操作符(如果你环境支持):
最后提醒下,别忘了在package.json里固定lodash版本,防止后面又被自动升级搞出问题: