我在一个使用Yarn的项目中意外地运行了npm install
并注意到npm创建了一个package-lock.json
文件。
我知道Yarn的受欢迎程度部分是因为它使用了一个锁定文件来生成比npm更可靠和确定性的依赖安装,而npm只有一段时间只有一个残缺的shrinkwrap feature,但现在我不是确定如何制作这个npm lockfile业务,以及是否有任何关于继续使用纱线的强烈信息。
所以本着previous Q and A on StackOverflow on yarn vs shrinkwrap的精神,我问下列内容:
答案 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平均更可靠。