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

标签 node.js npm yarnpkg

我不小心在一个使用 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/

相关文章:

javascript - 维持 NPM 依赖项的变化

node.js - 解析从 `npm view x dependencies` 写入 stdout 的数组

multithreading - 异步非阻塞循环与多线程的真实例子?

node.js - 在 MAC 上安装 bcrypt

node.js - npm glob 错误和未满足的依赖项

node.js - Node.js 中的 Google-Cloud 模块安装失败

npm - 运行vue项目getaddrinfo ENOTFOUND localhost报错

javascript - 如何在nodejs中使用sugar.js?

mysql - 使用 node.js,如何写入一个 MySQL 数据库并从另一个数据库读取?

ruby-on-rails - 我一直在尝试通过 Webpack 将 Quilljs 添加到 Rails 5.1 应用程序