何时在NPM上使用Yarn?有什么区别?


99

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

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


11
这不是一个坏问题,也不应该被否决。也就是说,它确实需要充实一下才能使其成为一个真正的好问题。
jedd.ahyoung

快速的Google证明了这一点。我相信对于StackOverflow来说,这可能太宽泛/没有建设性,反正可以做更多的研究。
Aurora0001

1
@ Aurora0001当我搜索时看到了备忘单,但这并不是我的问题的答案!我想知道两者之间的差异,而不是命令之间的差异。请先阅读我的问题
阿莎

4
@Asha您应该编辑问题以提供更多细节,并显示您已经研究过的内容。您想找到什么样的差异?您是否要找出库的实现方式?您是否要找出它们在解决问题上的不同之处?如果您使问题更精确,则可能会很好,具体取决于您要问的内容。(根据您的要求,该信息可能已在Google上提供。)
jedd.ahyoung,2016年

3
有趣的人告诉你用谷歌搜索;我发现您的问题将提交给Google ... stackoverflow中的人们喜欢将事情排除在外,好像会使他们变得更加重要。
jairhumberto

Answers:


67

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

从版本5开始, npm

  • 生成一个称为“ lockfile”的文件package-lock.json,该文件将修复整个依赖关系树,其方式与yarn(或其他任何一种)锁定机制相同,
  • 制作了工具
  • --save 现在暗示 npm i
  • 更好的网络和缓存使用率

npm 5.7.0进一步引入了此npm ci命令,该命令通过仅安装在中发现的软件包来在连续集成环境中更快地安装依赖项package-lock.json(如果package-lock.jsonpackage.json不同步,则报告错误)。

个人仍然使用npm


原版的

我不愿直接从文档中引用,但是他们在解释原因方面做得非常出色,简明扼要,以至于我看不到如何进一步总结思想。

大部分:

  1. 您总是知道您在每台开发机器上都能获得相同的东西

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

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

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

人们对此有什么生产经验?谁知道,这是普通大众的婴儿。

Yehuda Katz的 TL; DR :

从一开始,Yarn锁定文件可确保在同一存储库上重复运行yarn会产生相同的程序包。

其次,Yarn尝试在冷缓存(尤其是热缓存)下具有良好的性能。

最后,Yarn将安全性作为核心价值。

不错的博客文章

Gant Laborde的“ NPM vs纱线备忘单

该项目的版本略长:

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

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

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

并且从README.md

  • 脱机模式:如果您以前安装过软件包,则可以在没有任何互联网连接的情况下再次安装它。
  • 确定性:无论安装顺序如何,都将在每台计算机上以相同的精确方式安装相同的依赖项。
  • 网络性能:Yarn有效地将请求排队,并避免请求瀑布,以最大化网络利用率。
  • 多个注册表:从npm或Bower安装任何软件包,并保持软件包工作流程不变。
  • 网络弹性:单个请求失败不会导致安装失败。失败时重试请求。
  • 扁平模式:将不匹配的依赖项版本解决为单个版本,以避免创建重复项。
  • 更多表情符号。🐈

您能告诉我yarn是否像npm v3那样进行依赖关系解析吗?我知道有一个--flat选项可以强制采用真正的平面结构,其中每个依赖项只能安装一个版本,但是此选项的默认行为是什么?谢谢。
Dimitris Karagiannis,

2
更多表情符号:cat:
Huei Tan

7
极好的答案。我想知道他们是否在分叉,重命名和更改的语法之前是否尝试对npm做出贡献install -g
Gardner Bickford


2

npm

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

纱线

  1. 一个新的JavaScript软件包管理器。Yarn会缓存它下载的每个软件包,因此不再需要再次存储。它还并行化操作以最大程度地利用资源,因此安装时间比以往任何时候都快。
  2. Yarn不支持使用密码登录(而NPM则支持)

1
什么样的登录名?
Rich Stone

2

什么是PNPM?

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

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

如何安装PNPM?

npm install -g pnpm

如何使用PNPM安装npm软件包?

pnpm install -g typescript // or your desired package

PNPM超过Yarn和的好处NPM

下面是进度条表示采取了安装时间NPMYARNPNPM(较短巴为佳) 在此处输入图片说明

点击查看完整检查基准

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


1

当您使用Yarn安装软件包(使用yarn添加软件包名称)时,它将软件包放置在磁盘上。在下一次安装期间,将使用此软件包,而不是发送HTTP请求以从注册表获取tarball。

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

如果您使用的是专有软件,那么使用哪个软件都没有关系。使用npm,可以使用npm-shrinkwrap.js,而可以将Yarn.lock与Yarn一起使用。

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

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


1

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

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):一个更快,更安全,更可靠的软件包管理器对JavaScript。

您可以通过输入以下命令将Yarn添加到项目中:

yarn init

这将创建一个package.json文件。然后,使用以下命令安装依赖项:

yarn install

node_modules将生成一个文件夹。Yarn还将生成一个名为的文件yarn.lock。该文件的作用与相同,package-lock.json但使用确定性和可靠的算法构造,因此可生成一致的版本。

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

然而,NPM已经随着每个新版本的提高,有些项目仍然使用NPM超过


1

@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(尚未使用)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.