我是否提交由 npm 5 创建的 package-lock.json 文件?

新手上路,请多包涵

npm 5 于今天发布,其中一项新功能包括确定性安装以及创建 package-lock.json 文件。

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

我假设它类似于 yarn.lockcomposer.lock ,它们都应该保存在源代码管理中。

原文由 rink.attendant.6 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 891
2 个回答

是的, package-lock.json 旨在检查到源代码管理中。如果您使用的是 npm 5+,您可能会在命令行上看到此通知: created a lockfile as package-lock.json. You should commit this file. 根据 npm help package-lock.json

package-lock.json 对于 npm 修改 node_modules 树或 package.json 的任何操作都会自动生成。它描述了生成的确切树,以便后续安装能够生成相同的树,而不管中间依赖项更新如何。

该文件旨在提交到源存储库 中,并用于各种目的:

  • 描述依赖关系树的单一表示,以保证团队成员、部署和持续集成安装完全相同的依赖关系。

  • 为用户提供“时间旅行”到 node_modules 的先前状态的工具,而无需提交目录本身。

  • 通过可读的源代码控制差异来促进对树更改的更大可见性。

  • 并通过允许 npm 跳过以前安装的包的重复元数据解析来优化安装过程。

关于 package-lock.json 的一个关键细节是它无法发布,如果在顶级包以外的任何地方找到它,它将被忽略。它与 npm-shrinkwrap.json 共享格式,本质上是相同的文件,但允许发布。除非部署 CLI 工具或以其他方式使用发布过程来生成生产包,否则不建议这样做。

如果 package-lock.jsonnpm-shrinkwrap.json 都存在于包的根目录中,则 package-lock.json 将被完全忽略。

原文由 vine77 发布,翻译遵循 CC BY-SA 4.0 许可协议

将 package-lock.json 提交到源代码版本控制意味着项目将使用特定版本的依赖项,这些依赖项可能与 package.json 中定义的那些相匹配,也可能不匹配。虽然依赖项有一个特定版本,但没有任何插入符号 (^) 和波浪号 (~),如您所见,这意味着依赖项不会更新到最新版本。并且 npm install 将选择相同的版本,以及我们当前版本的 Angular 所需要的版本。

注意:如果我在 CI 期间将任何插入符号 (^) 和波浪号 (~) 添加到要更新的依赖项中,强烈建议将 package-lock.json 提交。

原文由 MedElmaachi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题