npm5今天发布,其中一个新特性包括通过创建package-lock.json文件进行确定性安装。

这个文件应该保存在源代码管理中吗?

我假设它类似于yarn.lock和composer.lock,它们都应该保存在源代码控制中。


当前回答

全局禁用package-lock.json

在终端中键入以下内容:

npm config set package-lock false

这对我来说真的很管用

其他回答

所有答案都说“是”,但这也取决于项目,医生说:

package-lock.json的一个关键细节是它不能被发布,如果在顶层包之外的任何地方找到它,就会被忽略。

这意味着你不需要在npm上发布依赖的package-lock.json,但你需要在repo中使用package-llock.json来锁定测试依赖的版本,构建依赖…

但是,如果您使用lerna来管理具有多个包的项目,那么应该只将package.json放在repo的根目录上,而不是放在每个子包中。你会得到这样的结果:

.git
lerna.json
package.json
package-lock.json        <--- here
packages/a/package.json
packages/a/lib/index.js
packages/b/package.json
packages/b/lib/index.js

是的,提交package-lock.json是一种标准做法。

提交package-lock.json的主要原因是项目中的每个人都使用相同的包版本。

赞成的意见:

如果您遵循严格的版本控制,并且不允许自动更新到主要版本,以避免在第三方包中发生向后不兼容的更改,那么提交包锁定会有很大帮助。如果您更新了一个特定的包,它会在package-lock.json中更新,并且使用存储库的每个人在接受您的更改时都会更新到该特定版本。

欺骗:

这会让你的拉取请求看起来很难看:)

npm安装无法确保项目中的每个人都使用相同的软件包版本。npm ci将对此有所帮助。

是的,最佳做法是办理登机手续(是,办理登机手续)

我同意,当看到差异时,这会引起很多噪音或冲突。但好处是:

确保开发环境和生产环境之间的每个包的版本完全相同。当在不同的时间在不同的环境中构建时,这一部分是最重要的。您可以在package.json中使用^1.2.3,但如何确保每次npm安装都会在开发机器和构建服务器中获得相同的版本,尤其是那些间接依赖包?好吧,package-lock.json将确保这一点。(借助基于锁文件安装软件包的npm-ci)它改进了安装过程。它有助于新的审计功能npm审计修复。

是的,您可以提交此文件。根据npm的官方文件:

对于npm修改node_modules树或package.json的任何操作,package-lock.json都会自动生成。它描述了生成的确切树,以便后续安装能够生成相同的树,而不考虑中间的依赖关系更新。此文件旨在提交到源存储库[.]中

全局禁用package-lock.json

在终端中键入以下内容:

npm config set package-lock false

这对我来说真的很管用