yarn.lock和npm的package-lock有什么区别?

时间:2017-07-04 05:03:42

标签: node.js npm yarnpkg

我在一个使用Yarn的项目中意外地运行了npm install并注意到npm创建了一个package-lock.json文件。

我知道Yarn的受欢迎程度部分是因为它使用了一个锁定文件来生成比npm更可靠和确定性的依赖安装,而npm只有一段时间只有一个残缺的shrinkwrap feature,但现在我不是确定如何制作这个npm lockfile业务,以及是否有任何关于继续使用纱线的强烈信息。

所以本着previous Q and A on StackOverflow on yarn vs shrinkwrap的精神,我问下列内容:

  • 两个包管理器在可靠性方面是否存在实质性差异?
  • 如果没有,是否有任何令人信服的理由继续使用Yarn"更多表情符号。 "

1 个答案:

答案 0 :(得分:16)

在纸面上,纱线和NPM 5看起来几乎相同。它们都具有确定性锁定文件,并且在功能上几乎相互匹配。有人会说纱线是推动NPM创新的催化剂。

然而,在经历了一个月的NPM 5后,我的团队决定搬到Yarn。

NPM技术上具有更确定性的"锁定文件,理论上保证在NPM版本中,NPM将生成完全相同的node_modules文件夹。另一方面,Yarn的依赖性的确切提升/排序取决于Yarn版本,并且可能会在Yarn版本中发生变化。总的来说,这影响很小。

为什么要使用Yarn呢?合并与可靠性。

Yarn做了一个轻微的决定论权衡,以实现一个更简单的yarn.lock文件,更容易合并。如果您是独立开发人员,这可能不会对您产生影响,但如果您的团队中有多个协作者提交依赖项更改,则很快就会成为一个巨大的问题。 NPM的package-lock实际上是不可合并的,你最终不得不重新生成或挣扎。另一方面,使用Yarn,合并很容易且可预测。

请参阅:https://yarnpkg.com/blog/2017/05/31/determinism/

作为旁注,我们还发现Yarn平均更可靠。