155

Yarn和 NPM有什么区别?在写这个问题的时候,我只能在 Internet 上找到一些文章,显示像这样的 NPM 命令的 Yarn 等价物是什么。

它们是否具有相同的功能(我知道 Yarn 会进行本地缓存,并且看起来您只需要下载一次包)但除此之外,从 NPM 迁移到 Yarn 还有什么好处?

4

6 回答 6

87

更新:2018 年 3 月(有点晚了……)

从版本 5 开始,npm

  • 生成一个名为“lockfile”的文件package-lock.json来修复整个依赖树,就像纱线(或任何其他)锁定机制一样,
  • 制作了一个工具
  • --save现在暗示为npm i
  • 更好的网络和缓存使用

npm 5.7.0 进一步引入npm ci在持续集成环境中通过仅安装找到的包来更快地安装依赖项的命令(如果和不同步package-lock.json则报告错误)。package-lock.jsonpackage.json

我个人还是用npm的。


原来的

我不愿意直接从文档中引用,但他们很好地解释了原因,简洁到我看不出如何进一步总结这些想法。

大部分:

  1. 你总是知道你在每台开发机器上得到同样的东西

  2. 它将npm没有的操作并行化,并且

  3. 它可以更有效地利用网络。

  4. 它还可以更有效地利用其他系统资源(例如 RAM)

人们对它有哪些生产经验?谁知道呢,对普通大众来说,它是个婴儿。

TL;来自 Yehuda Katz 的博士:

从一开始,Yarn 锁定文件就保证了在同一个存储库上重复运行 yarn 会产生相同的包。

其次,Yarn 尝试使用冷缓存来获得良好的性能,尤其是使用暖缓存。

最后,Yarn 让安全成为核心价值。

不错的博文

“<a href="https://shift.infinite.red/npm-vs-yarn-cheat-sheet-8755b092e5cc" rel="noreferrer">NPM 与纱线备忘单”,作者 Gant Laborde

项目中稍长的版本:

快速:Yarn 缓存它下载的每个包,因此它永远不需要再次缓存。它还并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。

可靠:使用详细但简洁的锁定文件格式和确定性的安装算法,Yarn 能够保证在一个系统上运行的安装将在任何其他系统上以完全相同的方式运行。

安全:在执行代码之前,Yarn 使用校验和来验证每个已安装包的完整性。

README.md

  • 离线模式:如果您以前安装过一个软件包,您可以在没有任何互联网连接的情况下再次安装它。
  • 确定性:无论安装顺序如何,都将在每台机器上以相同的方式安装相同的依赖项。
  • 网络性能:Yarn 有效地将请求排队并避免请求瀑布,以最大限度地提高网络利用率。
  • 多个注册表:从 npm 或 Bower 安装任何包,并保持包工作流程相同。
  • 网络弹性:单个请求失败不会导致安装失败。请求在失败时重试。
  • 平面模式:将不匹配的依赖版本解决为单个版本,以避免创建重复。
  • 更多表情符号。
于 2016-10-13T18:24:55.323 回答
8

什么是 PNPM?

pnpm使用硬链接和符号链接在磁盘上只保存一次模块的一个版本。例如,当使用 npm 或 Yarn 时,如果您有 100 个项目使用相同版本的 lodash,那么磁盘上将有 100 个 lodash 副本。使用 pnpm,lodash 将保存在磁盘上的单个位置,并且硬链接会将其放入应该安装的 node_modules 中。

结果,您节省了数千兆字节的磁盘空间,并且安装速度大大加快!如果您想了解有关 pnpm 创建的独特 node_modules 结构的更多详细信息,以及为什么它可以在 Node.js 生态系统中正常工作,请阅读这篇小文章:我们为什么要使用 pnpm?

如何安装 PNPM?

npm install -g pnpm

如何使用 PNPM 安装 npm 包?

pnpm install -g typescript // or your desired package

PNPMYarn和的好处NPM

这是显示安装时间的进度条NPMYARN并且PNPM(较短的条更好) 在此处输入图像描述

点击查看完整检查基准

有关更多详细信息,请访问https://www.npmjs.com/package/pnpm

于 2018-05-02T13:16:16.570 回答
7

试图为初学者提供更好的概述。

npm在历史上(2010 年)一直是 JavaScript 最流行的包管理器。如果要使用它来管理项目的依赖项,可以键入以下命令:

npm init

这将生成一个package.json文件。它包含项目的所有依赖项。

然后

npm install

将创建一个目录node_modules并下载其中的依赖项(您添加到package.json文件中的)。

它还将创建一个package-lock.json文件。该文件用于描述生成的依赖树。它允许开发人员安装完全相同的依赖项。例如,您可以想象一个开发人员将一个依赖项升级到 v2 然后 v3,而另一个直接升级到 v3。

npm以不确定的方式安装依赖项,这意味着两个开发者可能有不同的node_modules目录,从而导致不同的行为。**npm 在 2018 年 2 月的声誉不佳:在 5.7.0 版本中发现了一个问题,在 Linux 系统上运行 sudo npm 会更改系统文件的所有权,从而永久破坏操作系统。

为了解决这些问题和其他问题,Facebook 推出了一个新的包管理器(2016 年):Yarn一个更快、更安全、更可靠的 JavaScript 包管理器。

您可以通过键入以下内容将Yarn添加到项目中:

yarn init

这将创建一个package.json文件。然后,安装依赖项:

yarn install

node_modules将生成一个文件夹。Yarn还会生成一个名为yarn.lock. 该文件的用途与 相同,package-lock.json但使用确定性和可靠的算法构建,从而导致一致的构建。

如果您使用npm启动项目,您实际上可以轻松迁移到Yarn。纱线会消耗相同的package.json。有关详细信息,请参阅从 npm 迁移。

但是,每个新版本都对npm进行了改进,一些项目仍然使用npm而不是yarn

于 2019-07-25T21:23:53.233 回答
6

@msanford 的答案几乎涵盖了所有内容,但是,我缺少安全性(OWASP 的已知漏洞)部分。

您可以使用 来检查它们yarn audit,但是,您无法修复它们。这仍然是 GitHub ( https://github.com/yarnpkg/yarn/issues/7075 ) 上的一个未解决问题。

npm

您可以使用npm audit fix,因此其中一些您可以自己修复。

他们都有自己的持续集成工具npm audityarn audit它们分别是https://github.com/IBM/audit-ci(使用过,效果很好!)和https://yarnpkg.com/package/audit-ci(没用过)。

于 2020-07-10T10:31:13.913 回答
4

npm

  1. JavaScript 的包管理器。npm 是 npm 生态系统的命令行界面。它经过实战考验,出奇的灵活,每天被成千上万的 JavaScript 开发人员使用。
  2. NPM 生成正确的锁定文件,而 Yarn 锁定文件在某些​​情况下可能已损坏,必须使用 yarn-tools 修复

纱线

  1. 一个新的 JavaScript 包管理器。Yarn 会缓存它下载的每个包,因此它永远不需要再次缓存。它还并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。
  2. Yarn 不支持使用密码登录(而 NPM 支持)
于 2019-12-30T13:04:56.127 回答
2

当您使用 Yarn(使用 yarn add packagename)安装包时,它会将包放在您的磁盘上。在下一次安装期间,将使用此包而不是发送 HTTP 请求以从注册表中获取 tarball。

Yarn 带有一个方便的许可证检查器,如果你必须检查你所依赖的所有模块的许可证,它会变得非常强大。

如果您正在开发专有软件,那么您使用哪一个并不重要。使用 npm,你可以使用 npm-shrinkwrap.js,而你可以使用 yarn.lock 和 Yarn。

有关更多信息,请阅读以下博客

https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

于 2018-03-20T12:21:14.360 回答