我已经搜索了很多东西,并删除了该文件并执行了 `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: 正如Ulysse BN正确指出的那样,如果您使用的是NPM 6或更高版本,则可以使用npm audit fix
来请求NPM为您尝试修复漏洞。
编辑3: 阅读本文的人还应该查看下面JBallin的答案。它扩展了我在此处提供的信息,并且是(在我看来)一个更结构化的答案,更好地解答了OP的问题。但是,如果您想要快速修复,这个答案就足够了。
package.json
中的某个依赖项依赖于特定(有漏洞)版本的 Growl。你的答案已经朝着正确方向,如果你能分享一个命令,可以显示 package-lock.json
中哪些包依赖了存在漏洞的包,那么你或许就能解决这个问题。 - FuhrmanatorTLDR: 使用 npm i $PARENT_PKG_NAME
更新父级包。
注意
在更新依赖项时,应查看 CHANGELOG 是否有任何重大更改。
诊断
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
即可更新您的 package-lock.json。
如果父级没有解决漏洞
如果维护者似乎不响应,您可以考虑使用达到相同目的的替代软件包或 fork 该软件包并自己更新漏洞。
验证修复
你现在可以通过运行npm audit
来验证它是否有效,确保没有漏洞显示出来。提交你的更改,将它们推送到 GitHub,刷新您的通知/警报,然后它们应该消失!
步骤 1:安装同行依赖项
npm i --legacy-peer-deps
步骤2:手动更改包
手动编辑package-lock.json
文件,并将易受攻击的包版本更新为修复后的版本。
npm ci
这将根据 package-lock.json
安装软件包,首先忽略 package.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 audit fix
不可行,这可能是最好的解决方案。 - rpivovar用途:
npm i hoek
npm会安装最新版本的hoek,并更新您的package.lock.json文件。
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
命令。
npm update package-lock.json
package-lock.json
文件并重新安装所有软件包解决了问题。不确定为什么,但是,哇,这是一个令人沮丧的问题。 - ScottWelker