如何修复我的 package-lock.json 中未在 package.json 中列出的易受攻击的 npm 包?

How do I fix a vulnerable npm package in my package-lock.json that isn't listed in the package.json?

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

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

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

非常感谢。

听起来 Hoek 是您的依赖项之一的依赖项(因此,您 package.json 中的一个包需要它自己的 package.json)。

您已经尝试 deleting/reinstalling 并更新了您的项目依赖项但没有成功,因此似乎有问题的包依赖项指定了显式或最大版本。

如果没有看到每个依赖项的 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 的问题。但是 - 如果您想要快速修复 - 这个答案就足够了。

使用:

npm i hoek

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

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

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

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

TLDR:使用 npm i $PARENT_PKG_NAME.

更新 parent 包

备注

更新依赖项时,您应该查看 CHANGELOG 以了解任何重大更改。

诊断

npm audit 将显示易受攻击的软件包(请注意,为此您需要一个 package-lock.json 文件,因此您需要 运行 npm i),以及它依赖的包(如果适用)。请注意,您还可以使用 npm ls $CHILD_PKG_NAME 查看其 parent 依赖项。

快速修复尝试

npm audit fixnpm audit fix --force 值得一试,但有时需要手动完成修复(见下文)。

手动修复

很可能 parent 包已经修复了它们的依赖关系(您可以通过转到它们的 GitHub 并查看最近的提交来验证这一点——或者只是看看这是否修复了它),所以你可以 运行 npm i $PARENT_PKG_NAME @$NEW_VERSION 它会更新你的 package-lock.json.

如果parent还没有修复漏洞

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

验证修复

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

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

npm update package-lock.json

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

npm audit

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

npm audit fix

步骤 1:安装对等依赖项

npm i --legacy-peer-deps

第 2 步:手动更改包

手动编辑 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