协慌网

登录 贡献 社区

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

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

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

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

答案

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

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

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

  • 描述依赖关系树的单个表示,以确保队友,部署和持续集成能够安装完全相同的依赖关系。

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

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

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

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

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

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

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

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

  1. 保证每个包的完全相同的版本 。当在不同时间在不同环境中构建时,这部分是最重要的。您可以在package.json使用^1.2.3 ,但是如何确保每次npm install都会在您的开发机器和构建服务器中获取相同的版本,尤其是那些间接依赖包?好吧, package-lock.json将确保这一点。 (在npm ci的帮助下,根据锁文件安装包)
  2. 它改善了安装过程。
  3. 它有助于新的审计功能npm audit fix (我认为审计功能来自 npm 版本 6)。