ChatGPT解决这个技术问题 Extra ChatGPT

有没有办法强制 npm 生成 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.json 特定于 npm 5
package-lock.json 从 v5 开始在 npm 中默认自动生成,在以前的版本中,锁定文件名为 npm-shrinkwrap.json,它是使用 npm shrinkwrap 命令手动生成的。
@BrettMerrifield 谢谢!那是我的问题。我更新到 node 8.6.0 并使用它 npm 5.3.0 并且它工作。
检查您的.gitignore不知何故,我不小心在 .gitignore 中出现了 package-lock.json,因为 package-lock.json 没有出现在 git status 中,这让我很反感。

t
t0r0X

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

npm i --package-lock-only

根据 npm v6npm v7latest version 的文档:

--package-lock-only 参数只会更新 package-lock.json,而不是检查 node_modules 和下载依赖项。


这是现在正确的答案,其他人老了,不会工作。
任何线索如何在没有 devDependencies 的情况下生成 package-lock.json?我需要这个来进行干净的生产安装。 npm i --package-lock-only --only=production 似乎不起作用。
我认为不可能仅为生产依赖项生成 package-lock.json。但如果您运行 npm i --only=production,它应该只安装生产依赖项。因此,您的构建过程可能如下所示:安装所有依赖项、构建应用程序、删除 node_modules 并仅安装生产依赖项。
如果您想将较旧的项目从 yarn.lock 移开,这将非常有用。谢谢你。
M
Mathias Bynens

默认情况下,每次运行 npm install 时都会更新 package-lock.json。但是,可以通过在 ~/.npmrc 中设置 package-lock=false 来全局禁用此功能。

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

npm install --package-lock

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


@RonNewcomb 你能分享更多信息吗? “它不起作用”是什么意思?您使用的是哪个 npm 版本?
npm version 3.10.10 Node 6.10.3 您列出的命令似乎是空操作?什么都没发生。没有错误,没有文件更改,什么都没有。
如果您在项目中使用 npm v3,则不会有 package-lock.jsonpackage-lock.json 仅受 npm v5+ 支持。
npm v 6.4.1,这不会创建 package-lock.json
它适用于我,在 6.4.1 中。将其设置为 false 也可以防止它创建一个。
L
LJHarb

这在评论中得到了回答; package-lock.jsonnpm v5 及更高版本中的一项功能。 npm shrinkwrap 是您在 npm 的所有版本中创建锁定文件的方式。


但是请注意,package-lock.json 与收缩包装文件并不完全相同。
在 npm 5+ 中,它们实际上完全相同,直到每个细节,除了一件事:npm-shrinkwrap.json 将发布到注册表,而 package-lock.json 不会。
是的。不过,这是一个非常重要的区别,这就是我留下评论的原因。
npm shrinkwrap 生成 npm-shrinkwrap.json,但是如何生成 package-lock.json
它在 npm 5+ 中是自动的,或者您可以使用 --package-lock 在 5+ 中强制它
C
Charmis Varghese

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

npm i

但是如果不解决...

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

npm -v

它应该是至少 5.xx(其中 introduced package-lock.json 文件。)

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

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


Z
Zach Bloomquist

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

不是一个直接的答案,但也许它会帮助那些在这方面花费太长时间的人😅


t
trias

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


S
SridharKritha

如果您的 npm 版本低于版本 5,则安装更高版本以自动生成 package-lock.json。

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

npm i -g npm@6.14.0

您可以通过以下方式查看最新的 npm 版本列表

npm view npm versions