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

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

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


当前回答

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

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

其他回答

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

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

赞成的意见:

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

欺骗:

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

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

将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

这对我来说真的很管用

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

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

我不在项目中提交此文件。有什么意义?

它是生成的这是gitlab-ci.yml构建的gitlab中SHA1代码完整性错误的原因

虽然我确实从未在package.json中使用^作为libs,因为我有过不好的体验。