yarn.lock 和 npm 的 package-lock 有什么区别?
What is the difference between yarn.lock and npm's package-lock?
我在一个使用 Yarn 的项目中不小心 运行 npm install
并注意到 npm 创建了一个 package-lock.json
文件。
我知道 Yarn 的流行部分是因为它使用了一个锁文件来产生比 npm 更可靠和确定的依赖安装,npm 有一段时间只有一个残废 shrinkwrap feature,但现在我不是确定这个 npm lockfile 业务是做什么的,以及继续使用 Yarn 是否有任何令人信服的地方。
所以本着 的精神,我提出以下问题:
- 这两个包管理器在可靠性方面是否还有实质性差异?
- 如果不是,除了 "More emojis. " 之外,还有什么令人信服的理由继续使用 Yarn 吗?
在理论上,Yarn 和 NPM 5 看起来几乎相同。它们都有确定性的锁定文件,并且在功能上几乎相互匹配。有人会说 Yarn 是推动 NPM 创新的催化剂。
然而,在体验了一个月的 NPM 5 之后,我的团队决定转向 Yarn。
NPM 在技术上有一个 "more deterministic" 锁定文件,理论上可以保证跨 NPM 版本,NPM 将生成完全相同的 node_modules
文件夹。另一方面,Yarn 的确切 hoisting/ordering 依赖关系取决于 Yarn 版本,并且可能会在 Yarn 版本之间发生变化。一般来说,这个影响很小。
那为什么要用 Yarn?合并和可靠性。
Yarn 做出了轻微的确定性权衡,以实现更简单的 yarn.lock
文件,更容易合并。如果你是一个单独的开发者,这可能不会影响你,但如果你在一个有多个协作者提交依赖项更改的团队中,它很快就会成为一个大问题。 NPM 的 package-lock
实际上是不可合并的,你最终不得不重新生成或挣扎。另一方面,使用 Yarn,合并变得简单且可预测。
参见:https://yarnpkg.com/blog/2017/05/31/determinism/
附带说明一下,我们还发现 Yarn 平均而言更可靠。
我在一个使用 Yarn 的项目中不小心 运行 npm install
并注意到 npm 创建了一个 package-lock.json
文件。
我知道 Yarn 的流行部分是因为它使用了一个锁文件来产生比 npm 更可靠和确定的依赖安装,npm 有一段时间只有一个残废 shrinkwrap feature,但现在我不是确定这个 npm lockfile 业务是做什么的,以及继续使用 Yarn 是否有任何令人信服的地方。
所以本着
- 这两个包管理器在可靠性方面是否还有实质性差异?
- 如果不是,除了 "More emojis. " 之外,还有什么令人信服的理由继续使用 Yarn 吗?
在理论上,Yarn 和 NPM 5 看起来几乎相同。它们都有确定性的锁定文件,并且在功能上几乎相互匹配。有人会说 Yarn 是推动 NPM 创新的催化剂。
然而,在体验了一个月的 NPM 5 之后,我的团队决定转向 Yarn。
NPM 在技术上有一个 "more deterministic" 锁定文件,理论上可以保证跨 NPM 版本,NPM 将生成完全相同的 node_modules
文件夹。另一方面,Yarn 的确切 hoisting/ordering 依赖关系取决于 Yarn 版本,并且可能会在 Yarn 版本之间发生变化。一般来说,这个影响很小。
那为什么要用 Yarn?合并和可靠性。
Yarn 做出了轻微的确定性权衡,以实现更简单的 yarn.lock
文件,更容易合并。如果你是一个单独的开发者,这可能不会影响你,但如果你在一个有多个协作者提交依赖项更改的团队中,它很快就会成为一个大问题。 NPM 的 package-lock
实际上是不可合并的,你最终不得不重新生成或挣扎。另一方面,使用 Yarn,合并变得简单且可预测。
参见:https://yarnpkg.com/blog/2017/05/31/determinism/
附带说明一下,我们还发现 Yarn 平均而言更可靠。