如何使用loadVirtual和ENOLOCK修复npm审计错误?

31
   npm audit
npm ERR! code ENOLOCK
npm ERR! audit This command requires an existing lockfile.
npm ERR! audit Try creating one first with: npm i --package-lock-only
npm ERR! audit Original error: loadVirtual requires existing shrinkwrap file

我运行了npm audit并得到了以下错误。

当我运行以下命令时:

➜ npm config get package-lock
true

➜ npm config get shrinkwrap
true

有人能帮忙解决这个问题吗?如何修复呢?用npm audit fix --force也不能解决...


尝试删除 package-lock.json - jithil
你在项目文件夹中使用 npm init 初始化了吗?之后,只需键入 npm i --package-lock-only。不应该看到任何错误或漏洞。 - Nicolas Garcia III
12个回答

24

我刚刚运行了它所说的命令。

npm i --package-lock-only

然后它显示了0个漏洞。无论如何,再次运行audit fix,还是没有漏洞。


1
这对我解决了漏洞警告。为什么会发生这种情况?这是可以添加到安装中的东西吗?我正在使用它在Ubuntu上安装Homebridge,全新安装后立即被告知存在问题。有关错误报告流程的建议? - musicman1979

22
对我来说,这样做很合适。
npm cache clean --force
npm audit fix --force

what does npm fund do? - Abilogos
2
这对我来说有效,而且没有使用 npm fund 命令。 - Paul D.
npm fund 命令不是必需的。运行另外两个命令来清除缓存和强制修复审核标识的问题对我有所帮助。确保在包含package.jsonpackage-lock.json文件的目录中运行npm audit fix --force命令。在任何其他目录中运行审核命令都将失败。 - Keshav

17

问题在于您需要在目录中拥有 package.jsonpackage-lock.json 文件。

运行以下命令将为您解决问题。

npm init -y

npm i --package-lock-only

npm audit

这修复了问题


为了未来的回答,我建议以代码围栏/块的形式呈现CLI命令和源代码。代码块很容易从文本中脱颖而出,并提高了答案的可读性。 - lukasl-dev

8
该错误提示告诉你问题的根源:This command requires an existing lockfile.。这意味着你想要审核的package.json旁边没有一个package-lock.jsonnpm i --package-lock-only 仅生成/更新 package-lock.json 而不会重新安装依赖项;npm i 将重新安装依赖项并生成一个新的锁文件(基于你的配置设置)。

2

您需要创建package-lock.json,请运行

npm install

那么

npm audit fix

您不会遇到这个问题。


1

请尝试运行以下命令:

npm i --package-lock-only
npm config get package-lock
npm config get shrinkwrap
npm i --package-lock-only
npm audit fix

翻译自此处


1

我使用 npm install -g npm@8.3.0 命令升级了 npm 到最新版本,现在看起来没有问题了...


0

0

npm cache verify 对我来说解决了问题。

对于那些建议使用 npm cache clean --force 的人,请阅读以下内容。当我运行 npm cache clean 时,我收到了以下消息:

从 npm@5 开始,npm 缓存会通过将完整性不匹配视为缓存未命中来自我修复损坏问题。因此,从缓存中提取的数据保证是有效的。如果您想确保一切一致,请使用 npm cache verify。删除缓存只会使 npm 变慢,并且不太可能纠正您可能遇到的任何问题! 另一方面,如果您正在调试安装程序的问题,或者与写入空缓存的时间相关的竞争条件,您可以使用 npm install --cache /tmp/empty-cache 来使用临时缓存而不是清除实际缓存。 如果您确定要删除整个缓存,请使用 --force 选项重新运行此命令。


0
请使用Node 14,它修复了0个漏洞的问题。

1
您的回答可以通过添加更多支持性信息来改进。请[编辑]以添加进一步的细节,例如引用或文献,以便其他人可以确认您的答案是否正确。您可以在帮助中心中找到有关如何撰写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接