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


132

我无意中将其删除,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文件?


2
我认为package-lock.json特定于npm 5
Brett Merrifield

3
package-lock.json是从v5开始默认在npm中自动生成的,在以前的版本中,锁定文件名是,npm-shrinkwrap.json并且它是使用npm shrinkwrapcommand 手动生成的。
alexmac

@BrettMerrifield谢谢!那是我的问题。我对其进行了更新,node 8.6.0并且可以npm 5.3.0正常工作。
Big Money

检查您的.gitignore我不知何故地package-lock.json陷入了.gitignore困境,因为package-lock.json没有出现,git status这使我失望了。
约书亚·品特

Answers:


155

默认情况下,package-lock.json只要您运行,它就会更新npm install。然而,这可以通过全局设置禁用package-lock=false~/.npmrc

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

npm install --package-lock

此命令是强制执行package-lock.json更新的唯一保证方式。


@RonNewcomb您可以分享更多信息吗?“不起作用”是什么意思?您使用的是哪个npm版本?
Mathias Bynens

npm版本3.10.10节点6.10.3您列出的命令似乎是无操作?没发生什么事。没有错误,没有文件更改,什么都没有。
罗恩·纽科姆

2
如果您将npm v3用于您的项目,则不会有package-lock.jsonpackage-lock.json仅npm v5 +支持。
Mathias Bynens

8
npm v 6.4.1,这不会创建package-lock.json
mjuopperi

1
它在6.4.1中对我有用。将其设置为false还会阻止其创建一个。
凯文B

94

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

npm i --package-lock-only

根据https://docs.npmjs.com/cli/install.html

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


12
现在,这是正确的答案,其他人已经过时,无法正常工作。
Vaibhav Singh,

任何线索如何在没有devDependencies的情况下生成package-lock.json?我需要这个来进行清洁生产安装。 npm i --package-lock-only --only=production似乎不起作用。
罗伯特

我认为不可能package-lock.json仅针对生产依赖项生成。但是,如果运行npm i --only=production它,则应仅安装生产依赖项。因此,您的构建过程如下所示:安装所有依赖项,构建应用程序,删除node_modules并仅安装生产依赖项。
Janusz Przybylski,

14

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


1
但是请注意,package-lock.jsons与收缩包装文件并不完全相同。
凌晨

7
实际上,在npm 5+中,它们在每个细节上都是完全相同的,除了一件事:npm-shrinkwrap.json将发布到注册表,package-lock.json而不发布。
LJHarb '18年

6
是的 不过,这是一个非常重要的区别,这就是为什么我发表评论。
奋斗

1
npm shrinkwrap生成npm-shrinkwrap.json,但是您如何生成package-lock.json
维克(Vic)

5
它在npm 5+中是自动的,或者您可以通过--package-lock
LJHarb

1

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

npm i

但是如果没有解决......

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

npm -v

至少应为5.xx(已引入了package-lock.json文件。)

要在Lunix上更新npm,请遵循以下步骤说明。

有关更多详细信息的打包文件,请阅读此中间故事。


0

如果您的NPM版本更低5的版本,然后安装高版本用于获取自动生成的包lock.json

示例:将当前的npm升级到6.14.0版本

npm i -g npm@6.14.0

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

npm view npm versions

-3

每次运行时,都会重新生成package-lock.json npm i


13
这是仅适用于特定版本的真实nodenpm。我认为这是npm> = 5.0node> = 7.0,但我对此不是100%肯定。它不适node 6.11.3用于我。
Thor84no

2
如果在npm config中将package-lock设置为false,也不是true。使用“ npm config list”进行检查
Damo

对于npm修改node_modules树或package.json的任何操作,都会自动生成package-lock.json。根据docs.npmjs.com/files/package-lock.json 。但是未指定npm版本。
NanoNova
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.