Npm 我应该提交warn.lock和package-lock.json文件吗?

Npm 我应该提交warn.lock和package-lock.json文件吗?,npm,package,yarnpkg,Npm,Package,Yarnpkg,我们在所有确定性pkg安装中都使用了Thread,但不要阻止用户使用npm——我猜这两个文件都会导致问题。是否应该向.gitignore目录中添加一个文件?这些文件由您的工具管理,因此–假设使用Thread将有效地更新包锁.json–我认为提交这两个文件都可以 我认为对您的用户来说,最重要的是包锁.json(例如,我不使用Thread),因此必须提交这个包 对于warn.lock,这取决于您是单独工作还是在团队中工作。如果是索洛,那么我想没有必要去做。如果您(计划)在一个团队中工作,那么您可能应

我们在所有确定性pkg安装中都使用了Thread,但不要阻止用户使用npm——我猜这两个文件都会导致问题。是否应该向.gitignore目录中添加一个文件?

这些文件由您的工具管理,因此–假设使用Thread将有效地更新
包锁.json
–我认为提交这两个文件都可以

我认为对您的用户来说,最重要的是
包锁.json
(例如,我不使用Thread),因此必须提交这个包


对于
warn.lock
,这取决于您是单独工作还是在团队中工作。如果是索洛,那么我想没有必要去做。如果您(计划)在一个团队中工作,那么您可能应该提交它,至少在Thread之前,我的经验法则是:如果您正在处理一个应用程序,请提交锁文件。如果要维护库,请将其添加到忽略列表中。无论哪种方式,您都应该在
package.json
中使用准确的semver范围。()对何时提交
Gemfile.lock
(Ruby的锁文件)以及何时不提交做了很好的解释。至少阅读tl;博士部分。

我在想同样的问题。以下是我的想法,希望能有所帮助:

报告说:

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

这很好,因为它可以防止“在我的机器上工作”的效果

如果没有此文件,如果您
npm安装--save A
,npm会将
“A”:“^1.2.3”
添加到您的
包.json
。当其他人在您的项目上运行
npm install
时,
A
1.2.4
版本可能已经发布。由于它是满足您的
包.json
中指定的semver范围的最新可用版本,因此它将安装此版本。但是如果在这个版本中引入了一个新的bug呢?这个人会有一个问题,你不能复制,因为你有以前的版本,没有任何错误

通过修复
node_modules
目录的状态,
package lock.json
文件可以防止此问题,因为每个人都有相同版本的每个包

但是,如果您正在编写和发布npm模块,该怎么办?文件说明如下:

关于package-lock.json的一个关键细节是它不能被发布,如果在顶级包以外的任何地方找到它,它将被忽略

因此,即使您提交了它,当用户安装您的模块时,他/她也不会得到
package lock.json
文件,而只会得到
package.json
文件。因此,npm将安装满足所有依赖项的semver范围的最新版本。这意味着您总是希望使用这些依赖项的版本来测试模块,而不是在开始编写模块时安装的版本。因此,在这种情况下,
package lock.json
显然是无用的。此外,这可能会很烦人。

通常总是提交依赖项锁定文件 与其他地方一样,许多包管理系统(例如: 并且),应该在链末端项目中提交给代码库,以便每个试图运行该项目的人都使用经过测试的依赖项集

锁文件是否应该始终提交到打算包含在其他项目中的包中(需要更松散的依赖关系)还不太清楚。但是,在必要时,@Cyrille和NPM都会智能地分别忽略
warn.lock
package lock.json
,从而始终安全地提交这些锁文件

因此,您应该始终提交至少一个
warn.lock
package lock.json
,具体取决于您使用的包管理器

您应该同时提交warn.lock和package-lock.json吗? 目前,我们有两个不同的包管理系统,它们都安装了来自
package.json
的同一组依赖项,但它们生成和读取两个不同的文件。NPM5生成
package lock.json
,而纱线生成
warn.lock

如果您提交
package lock.json
,那么您正在构建对使用NPM 5安装依赖项的人员的支持。如果您提交
thread.lock
,您正在构建对使用thread安装依赖项的人员的支持

您是否选择提交
warn.lock
package lock.json
或两者,取决于在您的项目上开发的是仅使用warn还是NPM 5,或者两者都使用。如果您的项目是开源的,那么最有利于社区的做法可能是同时提交这两个项目,并有一个自动化的过程来确保
warn.lock
package lock.json
始终保持同步

更新:THEAN现在引入了一种新的方法,它将从
包lock.json
文件生成
THEAN.lock
文件。这对于保持两个文件的同步非常有用。(谢谢@weakish)


在纱线项目中详细讨论了这些问题:


现在两者都已关闭。

您应该提交一个依赖关系树锁定文件,但不应该同时提交这两个文件。这也需要对纱线或npm(并非两者)进行标准化,以建立并开发一个项目

如果您同时提交
warn.lock
文件和
package lock.json
文件,那么这两个文件可以通过多种方式提供不同的依赖树(即使是warn和npm的树解析算法)