如何修复我的 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 install
或 npm 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 fix
和 npm 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
Github 告诉我我的 package-lock.json 文件中的依赖项易受攻击且已过时。问题是,如果我执行 npm install
或 npm 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
.
备注
更新依赖项时,您应该查看 CHANGELOG 以了解任何重大更改。
诊断
npm audit
将显示易受攻击的软件包(请注意,为此您需要一个 package-lock.json 文件,因此您需要 运行 npm i
),以及它依赖的包(如果适用)。请注意,您还可以使用 npm ls $CHILD_PKG_NAME
查看其 parent 依赖项。
快速修复尝试
npm audit fix
和 npm 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