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

fny*_*fny 34 node.js npm yarnpkg

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

我知道Yarn的受欢迎程度部分是因为它使用了一个锁定文件来产生比npm更可靠和确定性的依赖安装,而npm只有一段时间只有一个残缺的收缩包装功能,但现在我不知道该怎么做这个npm lockfile业务以及是否有任何令人信服的继续使用纱线.

因此,在纱线与收缩包裹的StackOverflow上先前Q和A的精神中,我问以下问题:

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

Raj*_*ani 20

在纸面上,纱线和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平均更可靠.

  • 关于合并,我不知道我是否同意用yarn.lock做到“轻松”。几周前,我遇到了这个问题,并发现了这个对话,它基本上说您应该重新生成,但是要以特定的方式进行。https://github.com/yarnpkg/yarn/issues/1776#issuecomment-269539948 (2认同)