什么时候使用纱线超过NPM?有什么区别?

Ash*_*sha 79 javascript npm yarnpkg

Yarn和NPM有什么区别?在编写这个问题的时候,我只能在网上找什么展示就像一个NPM命令的纱线等同放着清单上的一些文章.

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

msa*_*ord 57

更新: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).

人们的生产经历是什么?谁知道,这对大众来说是婴儿.

来自Yehuda Katz的 TL; DR :

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

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

最后,纱线使安全成为核心价值.

好博文

Gant Laborde撰写的" NPM vs Yarn Cheat Sheet "

项目稍长版本:

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

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

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

README.md:

  • 离线模式:如果您之前已经安装过软件包,则无需任何互联网连接即可重新安装.
  • 确定性:无论安装顺序如何,相同的依赖关系将以相同的方式安装在每台机器上.
  • 网络性能:Yarn有效地排队请求并避免请求瀑布,以最大化网络利用率.
  • 多个注册表:从npm或Bower安装任何包,并使您的包工作流保持不变.
  • 网络恢复能力:单个请求失败不会导致安装失败.请求在失败时重试.
  • 平面模式:将不匹配的依赖项版本解析为单个版本,以避免创建重复项.
  • 更多表情符号.

  • 很好的答案.我想知道他们是否尝试在分叉和重命名以及更改`install -g`的语法之前为npm做出贡献. (7认同)
  • 更多表情符号:猫: (2认同)

Mat*_*ard 10

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

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

npm init
Run Code Online (Sandbox Code Playgroud)

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

然后

npm install
Run Code Online (Sandbox Code Playgroud)

将创建一个目录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


Dan*_*cki 6

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

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

新项目管理

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

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


Was*_*siF 5

什么是 PNPM?

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

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

如何安装PNPM?

npm install -g pnpm
Run Code Online (Sandbox Code Playgroud)

如何使用 PNPM 安装 npm 包?

pnpm install -g typescript // or your desired package
Run Code Online (Sandbox Code Playgroud)

PNPMYarn和的好处NPM

这是进度条,显示NPM,YARNPNPM( 越短越好)所花费的安装时间 在此处输入图片说明

单击以完成检查基准

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


小智 5

节点管理

  1. JavaScript 的包管理器。npm 是 npm 生态系统的命令行界面。它经过了实战考验,非常灵活,每天都有数十万 JavaScript 开发人员使用。
  2. NPM 生成正确的锁定文件,而 Yarn 锁定文件在某些​​情况下可能会损坏,必须使用纱线工具修复

纱线

  1. 一个新的 JavaScript 包管理器。Yarn 会缓存它下载的每个包,因此永远不需要再次下载。它还并行化操作以最大限度地提高资源利用率,因此安装时间比以往更快。
  2. Yarn 不支持使用密码登录(而 NPM 支持)

  • 什么样的登录? (6认同)