yarn.lock和npm的包装锁之间有什么区别?

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

我知道Yarn刺激了人气,部分原因是它使用了一个锁文件来产生比npm更可靠和更确定的依赖关系安装,而这个安装一会儿只有一个残缺的shrinkwrap特性 ,但是现在我不确定这个npm lockfile生意,以及是否有任何令人信服的继续使用纱线。

所以本着先前Q和A对StackOverflow的精神,我要问:

  • 这两个软件包pipe理者之间在可靠性方面是否存在重大差异?
  • 如果不是,除了“更多表情符号?”之外,还有什么令人信服的理由继续使用纱吗?

在纸上,纱线和NPM 5看起来几乎相同。 他们都有确定性的锁文件,并且在function上几乎相互匹配。 有人会说纱是促成NPM创新的催化剂。

但是,在经历了一个月的NPM 5之后,我的团队决定转向Yarn。

NPM在技术上有一个“更确定的”locking文件,因为在NPM版本中有一个理论保证,NPM将生成完全相同的node_modules文件夹。 另一方面,纱线的依赖关系的确切提升/sorting依赖于纱线版本,并且可以在纱线版本中改变。 总的来说,这个影响很小。

为什么使用纱线呢? 合并和可靠性。

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

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

作为一个方便的说明,我们也发现平均而言纱线更可靠。