132

Github 告诉我 package-lock.json 文件中的依赖项易受攻击且已过时。问题是,如果我执行npm installor npm update,它们都不会更新 package-lock.json 文件中的依赖项。

我对此进行了很多谷歌搜索,并删除了文件并完成了npm install.

如果有人可以帮助解决这个问题,我将不胜感激。有问题的包是 Hoek,我的 package.json 文件中实际上没有它。

提前谢谢了。

4

9 回答 9

60

听起来 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 的问题。但是-如果您想要快速修复-这个答案就足够了。

于 2018-05-14T10:47:20.843 回答
43

TLDR:使用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它,它会更新您的包锁.json。

如果父母没有修复漏洞

如果维护者似乎没有响应,您可以考虑使用替代包来完成相同的事情,或者分叉包并自己更新漏洞。

验证修复

npm audit您现在可以通过运行并确保没有漏洞出现来验证它是否有效。提交您的更改,将它们推送到 GitHub,刷新您的通知/警报,它们应该会消失!

于 2018-11-27T19:41:35.823 回答
8

如果你有 npm@6 或更高版本,你可以使用npm audit fix你的安全问题。

于 2018-10-13T10:36:46.467 回答
7

手动编辑package-lock.json并将易受攻击的软件包版本更新为固定版本,然后使用

npm ci

这将package-lock.json通过首先忽略来安装软件包package.json。然后使用

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

于 2020-10-24T18:45:19.127 回答
3

利用:

npm 我胡克

npm 将安装最新版本的 hoek 并且你的 package.lock.json 会更新。

于 2018-07-31T16:46:56.570 回答
1

要检查易受攻击的 npm 包,只需使用以下命令:

npm audit

要修复易受攻击的 npm 包,只需使用以下命令即可修复 package-lock.json:

npm audit fix
于 2019-12-29T04:41:41.773 回答
0

我遇到了这个问题,发现这是因为我运行 npm 的服务器上有旧版本的 npm - package-lock.json 仅受新版本支持。

于 2018-09-21T14:48:11.530 回答
-1

您是否尝试过:转到您的项目根目录,删除package-lock.json文件node_modules.cache文件夹,然后npm install.

于 2018-11-14T08:03:44.057 回答
-5

安装新的依赖项后,运行以下命令来更新 package-lock.json 文件:

npm update package-lock.json
于 2019-07-01T01:43:30.797 回答