我不小心在一个使用 Yarn 的项目中运行了 npm install
并注意到 npm 创建了一个 package-lock.json
文件。
我知道 Yarn 的受欢迎程度飙升的部分原因是它使用锁文件来生成比 npm 更可靠和确定性的依赖安装,npm 有一段时间只有一个残缺的 shrinkwrap feature ,但现在我不确定如何处理这个 npm 锁定文件业务,以及继续使用 Yarn 是否有什么令人信服的地方。
本着 previous Q and A on StackOverflow on yarn vs shrinkwrap 的精神,我问以下问题:
- 这两个包管理器在可靠性方面是否存在任何实质性差异?
- 如果没有,除了“更多表情符号。🐈”之外,还有什么令人信服的理由继续使用 Yarn?
最佳答案
在纸面上,Yarn 和 NPM 5 看起来几乎相同。它们都具有确定性锁定文件,并且在功能上几乎相互匹配。有人会说 Yarn 是 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 平均而言更可靠。
关于node.js - yarn.lock 和 npm 的 package-lock 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44897368/