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

Art*_*mus 105 package npm yarnpkg

我们使用纱线进行所有确定性的pkg安装但不阻止用户使用npm - 我猜这两个文件都会导致问题.是否应该将一个添加到.gitignore目录中?

Rob*_*low 122

始终提交依赖锁定文件

正如覆盖在其他地方,依赖锁文件,这是由很多的包管理系统的支持(如: 作曲家打捆),应致力于在结束链项目的代码库-让每个人尝试运行该项目正在做所以用完全相同的测试依赖集.

是否应该始终将锁定文件提交到旨在包含在其他项目中的包(其中需要更松散的依赖项),这一点尚不清楚.但是,Yarn和NPM(由@Cyrille所涵盖)智能地忽略yarn.lock并且package-lock.json在必要时分别使得始终提交这些锁定文件变得安全.

因此,您应始终至少提交一个yarn.lockpackage-lock.json取决于您正在使用的包管理器.

你应该同时提交yarn.lock和package-lock.json吗?

目前我们有两个不同的包管理系统,安装都同样依赖集package.json,但生成并从两个不同的lockfiles读取.NPM 5生成package-lock.json,而Yarn生成yarn.lock.

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

无论您选择提交yarn.lock还是package-lock.json两者都取决于您项目中的开发人员是仅使用Yarn还是NPM 5或两者.如果您的项目是开源的,那么最适合社区的事情可能是提交两者并拥有自动化流程以确保yarn.lockpackage-lock.json始终保持同步.

更新: Yarn现在引入了一个import命令,它将yarn.lockpackage-lock.json文件生成一个文件.这对于保持两个文件同步很有用.(谢谢@weakish)


这个问题在Yarn项目中进行了详细讨论:

两者现已关闭.

  • 很好的答案。然而,关于你的观点:_“最安全的做法是在每次依赖项发生变化时生成并提交它们。”_我不确定为什么这是“最安全”的做法。正如您所提到的,很可能“这两个文件可能会不同步。”@crimbo 的答案更详细地解释了这个问题。 (2认同)

cri*_*mbo 17

您应该提交1个依赖树锁文件,但不应同时提交.这也需要标准化纱线或npm(不是两者)来构建+开发项目.

如果你对纱线进行标准化,这里是关于为什么要使用yarn.lock的纱线文章.

如果同时提交yarn.lock文件和package-lock.json文件,那么2个文件可以提供多种方式来提供不同的依赖关系树(即使纱线和npm的树分辨率算法完全相同),并且确保它们提供的完全相同也是非常重要的.同样的答案.由于它不重要,因此不太可能在两个文件中维护相同的依赖树,并且您不希望根据构建是使用yarn还是npm完成不同的行为.

如果纱线从使用切换yarn.lockpackage-lock.json(此处发布),那么选择要提交的锁定文件变得容易,我们不再需要担心纱线和npm导致不同的构建.根据这篇博文,这是一个我们不应该期待的变化(博客文章也描述了yarn.lock和之间的差异)package-lock.json.


Cyr*_*lle 8

我在想同样的问题。这是我的想法,希望对您有所帮助:

NPM包lock.json文档说以下:

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

这很棒,因为它可以防止“在我的机器上工作”的影响。

如果没有此文件,npm install --save Anpm将添加"A": "^1.2.3"到您的中package.json。当别人运行npm install你的项目,有可能是版本1.2.4A已被释放。由于它是满足您指定的semver范围的最新可用版本package.json,因此它将安装该版本。但是,如果此版本中引入了新的错误怎么办?此人将遇到一个无法复制的问题,因为您使用的是先前版本,没有任何错误。

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

但是,如果您正在编写和发布npm模块呢?该文档说:

关于package-lock.json的一个关键细节是它无法发布,并且如果在顶级软件包之外的任何地方都将被忽略。

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


Bin*_*e01 6

你说得对!允许npmyarn同时使用会导致问题。看看这篇文章

目前,我们正在计划一些警告添加到谁使用两个用户 yarn,并npm在同一仓库安装软件包。

package-lock.json如果您决定使用纱线,我们强烈建议您删除该文件,以避免将来出现混淆和可能的一致性问题。

您可能不想要npmyarn作为您的包管理器。


rav*_*ius 5

这是我的经验法则:如果您正在处理应用程序,请提交锁定文件。如果要维护库,请将其添加到忽略列表中。无论哪种方式,您都应该在中使用准确的semver范围package.jsonYehuda Katz(已缓存)为何时提交Gemfile.lock(Ruby的锁定文件)以及何时不提交做出了很好的解释。至少阅读tl; dr部分。


小智 3

这些文件由您的工具管理,因此\xe2\x80\x93假设使用yarn将有效更新package-lock.json\xe2\x80\x93I suppose committing both files works fine.

\n\n

我认为对您的用户来说最重要的是package-lock.json(例如,我不使用纱线)所以这个 to be committed.

\n\n

对于yarn.lock,这取决于您是单独工作还是团队合作。如果单独的话,我想没有必要提交。如果您(计划)在团队中工作,那么您可能应该提交它,至少在纱线支持它之前

\n\n

我想yarn团队最终会停止使用yarn.lock并使用package-json.lock instead, at this time it will become simpler

\n

  • 他们并没有停止使用yarn.lock。 (3认同)