npm安装未创建新的package-lock.json文件

84

我不小心删除了package-lock.json文件,npm install没有生成新的文件。如何让npm重新创建这个文件。


1
@emil,它最初创建了一个 package-lock.json 文件,而我也没有 shrinkwrap.json。以前从未见过这种情况。 - Dblock247
2
此外,npm 只有在修改 node_modules 文件夹时才会创建/更新锁定文件,因此理论上您可以删除 node_modules 文件夹,运行 npm i,它应该为您重新生成文件。 - wjvander
1
@emil 我刚刚升级到v8.4.0并运行了npm install,它创建了package-lock.json文件。 - Dblock247
1
@emil,一个适当的答案将有助于解决这个问题。 - isherwood
14
对于遇到此问题的其他人:请确保 .npmrc 文件中不包含 package-lock=false。这也是 package-lock.json 不存在的另一个原因。请注意,这可能会影响 package-lock.json 的生成。 - Kevin
显示剩余6条评论
6个回答

98

可能会有一个名为.npmrc的文件,其中可能包含

package-lock=false

这将导致不生成软件包锁定文件。

理论上,您还可以在全局范围内打开 npm config set package-lock false(更改为 true 以重新打开),但这更不可能是无意中发生的。


3
没错,就是这样。谢谢你将这个作为一个合适的回答添加进来。 - Joshua Pinter
1
这是什么目的?我正在处理一个需要运行 npm ci 的项目,但是由于缺少 package-lock 文件而失败了 - 那么为什么维护者会将此设置添加到 npmrc 中呢? - Matt
1
@Matt 有些人看不到版本锁定文件的好处,因此讨厌每次生成新的锁定文件,从他们的角度来看这会“污染”他们的提交。 - David Mulder
这个能否在 package.json 中指定(不需要额外的文件)。我的意思是,它与 package.json 有关。这是安装 node 包所必需的文件… - Domske

54

在npm v5中引入了package-lock.json文件,因此您需要采取哪些步骤来重新生成package-lock.json取决于您使用的npm版本。

顺便说一句,让我们验证一下node和npm的版本。

npm -v

输出:x.x.x

node -v

打印:x.x.x

如果符合以下两个条件,即npm版本>5.x.x和node版本>7.x.x,则会自动生成package-lock.json文件。

然后,根据您的npm版本,尝试以下步骤:

npm v5+:

通过运行npm install重新生成package-lock.json文件。您还可以使用npm install --package-lock-only重新生成文件,而不实际下载依赖项。

npm v4.x及更早版本:

  1. 通过运行npm shrinkwrap生成npm-shrinkwrap.json文件。在较早版本的npm中,此文件的格式与package-lock.json相同,并且在本质上达到了相同的目的(有关此点的详细信息,请参见https://docs.npmjs.com/files/package-lock.jsonhttps://docs.npmjs.com/files/shrinkwrap.json
  2. 将npm-shrinkwrap.json重命名为package-lock.json

6
这里使用的是Node 8.9.1和npm 6.4.0。在执行npm install命令时不会生成package-lock.json文件。 - angularsen
3
啊,刚才从上面的评论中了解到 .npmrc 可能会有 package-lock=false 的设置,而我们的项目恰好是这样的。请你将其翻译成通俗易懂的中文,且不要改变原意。 - angularsen

17
为了解决这个问题,我尝试了以下方法并使它能够正常工作:
确保全局启用了package-lock,可以使用以下命令启用:
npm config set package-lock true 为了确保.npmrc文件不阻止创建package-lock文件,请将以下内容添加到.npmrc文件中:
echo 'package-lock=true' >> .npmrc
注意:对于任何npm修改node_modules树或npm -v > 5.x.x的package.json的操作,都会自动生成package-lock.json文件。
检查您的npm版本:
npm -v
使用以下命令更新您的npm到最新版本:
npm install -g npm@latest
npm i -g npm-upgrade @will

1
确保在命令行中处于正确的文件夹中(在 Linux/macOS 中使用 pwd 获取当前所在路径)。
我已经多次运行了 npm install,只是后来才发现我是在错误的文件夹中进行操作。

-1

我也遇到了同样的问题

我只是从.npmrc中删除了package-lock=false,现在它正在创建锁定文件


2
这似乎是 @DavidMulder 答案的副本。 - mikemaccana
真正答案的副本 - Ashish sah

-2
如果您的npm版本低于5,则在运行npm install时会创建一个shrinkwrap.json文件。
否则,npm 5及以上版本将创建package-lock。

1
在我运行 npm i 后,它没有生成任何内容。使用的是 node 6.12.2 和 npm 3.10.10。 - Mike Milkman
不确定这是否与 npm 版本有很大关系,因为对于我的项目,我们使用的是版本 14.xx,它仍然生成了 shrinkwrap.json,很可能是某些设置。但是如果您找不到 package-lock.json,那么检查是否有这样的文件是值得的。 - cloned

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