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

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

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


当前回答

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

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

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

其他回答

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

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

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

是的,它打算被签入。我想建议它获得自己独特的提交。我们发现它给我们的差异增加了很多噪音。

将package-lock.json提交到源代码版本控制意味着项目将使用特定版本的依赖项,该依赖项可能与package.json中定义的依赖项相匹配,也可能与之不匹配。虽然依赖项具有特定版本,但如您所见,没有任何Caret(^)和Tilde(~),这意味着依赖项不会更新到最新版本。npm install将获取当前版本Angular所需的相同版本。

注意:package-lock.json强烈建议在CI期间将任何Caret(^)和Tilde(~)添加到要更新的依赖项时提交它。

全局禁用package-lock.json

在终端中键入以下内容:

npm config set package-lock false

这对我来说真的很管用

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

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

赞成的意见:

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

欺骗:

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

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