什么时候使用Yarn而不是NPM?有什么区别?

v64noz0r  于 9个月前  发布在  Yarn
关注(0)|答案(7)|浏览(159)

Yarn和NPM之间有什么区别?在写这个问题的时候,我只能在互联网上找到一些文章,展示像这样的NPM命令的Yarn等价物。
他们有相同的功能吗(我知道Yarn做本地缓存,看起来你只需要下载一个包一次),但除此之外,从NPM迁移到Yarn还有什么好处吗?

q43xntqr

q43xntqr1#

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

自版本5起,npm

  • 生成一个名为package-lock.json的“锁文件”,它以与yarn(或任何其他)锁定机制相同的方式修复整个依赖关系树,
  • 一个工具已经被制造出来了
  • --save现在隐含为npm i
  • 更好的网络和缓存使用率

npm 5.7.0 further introducednpm ci命令,通过只安装在package-lock.json中找到的软件包,在持续集成环境中更快地安装依赖项(如果package-lock.jsonpackage.json不同步,则报告错误)。

  • 就个人而言 *,我仍然使用npm

原创

我不愿意直接引用文档,但他们在解释原因方面做得很好,足够简洁,我不知道如何进一步总结这些想法。
拉尔森:
1.你总是知道你在每一台开发机器上得到同样的东西
1.它简化了npm没有的操作,
1.更有效地利用网络。
1.它也可以使use of other system resources (such as RAM)更有效。
人们对它的生产经验如何?谁知道呢,它对普通大众来说是一个婴儿。

TL;DR from Yehuda Katz

从一开始,Yarn锁文件就保证在同一个存储库上重复运行yarn会产生相同的包。
第二,Yarn尝试使用冷缓存来获得良好的性能,特别是使用热缓存。
最后,Yarn使安全成为核心价值。

不错的博文

NPM vs Yarn Cheat Sheet》Gant拉博德

略长版本from the project

快速:Yarn会缓存它下载的每个包,这样它就再也不需要下载了。它还将操作并行化,以最大限度地提高资源利用率,因此安装时间比以往任何时候都快。
可靠性:使用详细但简洁的锁定文件格式和确定性的安装算法,Yarn能够保证在一个系统上运行的安装在任何其他系统上都将以完全相同的方式运行。
安全:Yarn使用校验和来验证每个已安装包的完整性,然后再执行其代码。

the README.md开始:

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

dphi5xsq2#

试图为初学者给予更好的概述。

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 introduced a new package manager(2016):Yarnafaster,more security,and more reliablypackage manager for JavaScript.
您可以通过键入以下命令将Yarn添加到项目中:
yarn init
这将创建一个package.json文件。然后,使用以下命令安装依赖项:
yarn install
将生成一个文件夹node_modulesYarn还将生成一个名为yarn.lock的文件。该文件与package-lock.json的目的相同,但使用确定性和可靠的算法构建,从而导致一致的构建。
如果你用npm启动了一个项目,你实际上可以很容易地迁移到Yarn。yarn将消耗相同的package.json。更多细节请参见Migrating from npm
然而,npm在每个新版本中都得到了改进,一些项目仍然使用npm而不是yarn

bz4sfanl

bz4sfanl3#

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

Yarn

您可以使用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(没有使用过)。

eanckbw9

eanckbw94#

npm

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

Yarn

1.一个新的JavaScript包管理器。Yarn缓存它下载的每个包,因此它永远不需要再次。它还并行操作,以最大限度地提高资源利用率,因此安装时间比以往更快。

  1. Yarn不支持使用密码登录(而NPM支持)
uelo1irk

uelo1irk5#

当你使用Yarn(使用yarn add packagrance)安装一个软件包时,它会将软件包放在你的磁盘上。在下一次安装过程中,这个软件包将被使用,而不是发送一个HTTP请求来从注册表中获取tarball。
Yarn附带了一个方便的许可证检查器,如果你必须检查你所依赖的所有模块的许可证,它会变得非常强大。
如果你正在使用专有软件,那么你使用哪一个并不重要。使用npm,你可以使用npm-shrinkwrap.js,而你可以使用yarn.lock和Yarn。
欲了解更多信息,请阅读以下博客
https://blog.risingstack.com/yarn-vs-npm-node-js-package-managers/

mrwjdhj3

mrwjdhj36#

Yarn

优点:

  • 支持并行安装和零安装等功能,从而提高性能
  • 更安全
  • 大型活跃用户社区
    缺点:
  • 不适用于旧版本的Node.js(低于版本5)
  • 安装本机模块的问题

NPM

优点:

  • 易于使用,特别是对于使用旧版本的开发人员。
  • 优化本地软件包安装,以保存硬盘空间。
    缺点:
  • 安全漏洞依然存在
  • 结论:*
  • Yarn比NPM好吗?*

在速度和性能方面,Yarn比NPM更好,因为它执行并行安装。Yarn仍然比NPM更安全。但是,Yarn比NPM使用更多的磁盘空间。

avwztpqn

avwztpqn7#

Yarn从版本4开始包含一个命令yarn upgrade-interactive。以前它必须手动安装,但现在这个核心插件是内置的。它有一个很好的CLI界面,可以让你选择更新版本,可能会升级到依赖项的新主版本。在npm中,没有这样的命令。最接近的NPM等效3rd party package npm-check-updates,必须手动安装。
NPM有npm link命令 *,它实际上可以工作 *。它可以让你'安装'本地软件包-通常是一个库-在你使用它的其他本地项目中进行测试。这个命令被称为problematic or non-working in yarn

yarn的另一个优势是工作区管理的强大工具,使其甚至可以与lerna相媲美,但从版本8开始,即使是npm也有可用的工作区实用程序。

相关问题