Github告诉我,我的package-lock.json文件中的依赖项容易受到攻击且过时。问题是,如果我npm install
或npm update
,它们都不会更新 package-lock.json 文件中的依赖项。
我对此做了很多谷歌搜索,并删除了文件并完成了npm install
.
如果有人可以帮助解决这个问题,我将不胜感激。有问题的包是Hoek,我的package.json文件中实际上没有它。
听起来Hoek是你的一个依赖关系的依赖关系(所以,你的package.json中的一个包需要它来自它自己的package.json)。
您已经尝试删除/重新安装和更新项目依赖项但没有成功,因此似乎有问题的包依赖项指定了显式版本或最高版本。
如果没有看到每个依赖项的 package.json,就很难进一步建议如何强制更新。
编辑:为了帮助您识别哪些包正在使用哪些依赖项,您可以使用 NPM 的ls
命令:https://docs.npmjs.com/cli/ls
例如,要查看哪些包正在使用 Hoek:npm ls hoek
编辑2:正如雅典表正确指出的那样,如果您拥有NPM版本6或更高版本,您可以使用npm audit fix
要求NPM尝试为您修复漏洞。
编辑3:阅读本文的人也应该在下面查看JBallin的答案。它扩展了我在这里提供的信息,并且(在我看来)是一个更有条理的答案,可以更好地解决OP的问题。但是 - 如果你想要一个快速的解决方案 - 这个答案应该足够了。
TLDR:使用npm i $PARENT_PKG_NAME
更新父包。
注意
更新依赖项时,应查看更改日志以了解任何重大更改。
诊断
npm audit
将显示易受攻击的包(请注意,为此需要一个 package-lock.json 文件,因此您需要运行npm i
),以及它是其依赖项的包(如果适用)。请注意,您还可以使用npm ls $CHILD_PKG_NAME
查看其父依赖项。
快速修复尝试
npm audit fix
和npm audit fix --force
值得一试,但有时需要手动完成修复(见下文)。
手动修复
很可能父包已经修复了它们的依赖项(你可以通过访问他们的GitHub并查看最近的提交来验证这一点 - 或者只是看看这是否修复了它),所以你可以运行npm i $PARENT_PKG_NAME @$NEW_VERSION
,它会更新你的包-lock.json。
如果父级尚未修复漏洞
如果维护者似乎没有响应,您可以考虑使用完成相同操作的替代软件包,或者分叉软件包并自己更新漏洞。
验证修复
现在,您可以通过运行npm audit
并确保没有漏洞显示来验证它是否正常工作。提交您的更改,将它们推送到 GitHub,刷新您的通知/警报,它们应该消失了!
步骤 1:安装对等依赖项
npm i --legacy-peer-deps
步骤 2:手动更改包
手动编辑package-lock.json
并将易受攻击的软件包版本更新为固定版本。
npm ci
这将通过首先忽略package.json
来根据package-lock.json
安装软件包。
第 3 步:再次控制它
跑
npm audit fix
以确定它是否正确完成。如果它没有帮助,请使用其他给定的解决方案。
更多信息在这里:
https://blog.npmjs.org/post/171556855892/introducing-npm-ci-for-faster-more-reliable
或在这里: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities
如果您有npm@6或更高版本,则可以使用npm audit fix
来解决安全问题。
使用:
npm i hoek
npm 将安装最新版本的 hoek 和你的 package.lock.json 更新。
自 NPM v8.3.0 (2021-12-09) 起,package.json
有一个属性overrides
可以帮助您修复依赖依赖项上的漏洞。无需触摸package-lock.json
文件。
{
"overrides": {
"foo": "1.0.0"
}
}
文档:https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides
注意:不要忘记检查您尝试覆盖的包上是否存在中断性更改。
要检查易受攻击的 npm 包,只需使用以下命令:
npm audit
要修复易受攻击的 npm 包,只需使用以下命令也可以修复 package-lock.json:
npm audit fix
我遇到了这个问题,发现这是因为我运行 npm 的服务器上有一个旧版本的 npm - package-lock.json 仅受较新版本支持。
您是否尝试过:转到项目根目录,删除package-lock.json
文件,node_modules
和.cache
文件夹,然后npm install
。
安装新的依赖项后,运行以下命令以更新 package-lock.json 文件:
npm update package-lock.json