有没有办法强制 npm 生成 package-lock.json?

Is there a way to force npm to generate package-lock.json?

我不小心删除了它,此后对 package.json 做了很多修改。 npm installnpm update 不再生成 package-lock.json。我尝试清除我的 npm 缓存和我的 nvm 缓存,但似乎没有任何效果。我在 Node.js 的几个版本上尝试过它(6.10.3 Node.js - 我希望它在 3.10.10 npm 上工作),但它在任何版本上都不起作用。

有没有办法强制 npm 生成 package-lock.json 文件?

这个在评论里回答了; package-lock.jsonnpm v5 及更高版本中的一项功能。 npm shrinkwrap 是在 npm.

的所有版本中创建锁定文件的方式

默认情况下,只要您 运行 npm install,就会更新 package-lock.json。但是,可以通过在 ~/.npmrc.

中设置 package-lock=false 全局禁用此功能

当全局 package-lock=false 设置处于活动状态时,您仍然可以通过 运行ning 强制更新项目的 package-lock.json 文件:

npm install --package-lock

此命令是强制 package-lock.json 更新的唯一可靠方法。

在 npm 6.x 和 7.x 中你可以使用

npm i --package-lock-only

根据 npm v6, npm v7 or latest version 的文档:

The --package-lock-only argument will only update the package-lock.json, instead of checking node_modules and downloading dependencies.

正如几个答案所解释的那样,你应该 运行:

npm i

但是如果解决...

检查 npm 可执行文件的版本。(对我来说是 3.x.x,它不使用 package-lock.json(在全部))

npm -v

应该至少5.x.xintroduced包-lock.json文件。)

要在 Linux 上更新 npm,请按照 these 说明进行操作。

有关包文件的更多详细信息,请阅读this medium故事。

如果您的 npm 版本 版本 5 然后安装更高版本自动生成 package-lock.json.

示例:将您当前的 npm 升级到版本 6.14.0(示例 - 您可以选择任何其他最新版本)

npm i -g npm@6.14.0

您可以通过

查看最新的npm版本列表
npm view npm versions

使用本地包时,我发现可靠地重新生成 package-lock.json 文件的唯一方法是删除它,以及删除链接模块和所有相应的 node_modules 文件夹和让它用 npm i

重新生成

如果您像我一样,尝试了这里的所有答案,想知道为什么 package-lock.json 没有出现在您的 Git“已更改的文件”中。在这种情况下,请检查以确保过去没有人将 package-lock.json 添加到 .gitignore

不是一个真正的直接答案,但也许它会帮助那些在这个问题上花了太多时间的人