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

纱线和 NPM 有什么不同? 在写这个问题的时候,我只能在互联网上找到一些文章,显示什么是 Yarn 等价于 NPM 命令,如 这个

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

39924 次浏览

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

从第五版开始,npm

  • 生成一个名为 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)更有效率。

人们对它有什么样的生产经验? 谁知道呢,它对于普通大众来说还是个婴儿。

DR 来自 Yehuda Katz:

从一开始纱线锁定文件就保证了这个过程的重复运行 纱线在相同的储存库中生产出相同的包装。

第二,纱试图有良好的性能,具有冷藏,但 特别是有温暖的储藏室。

最后,纱线使安全成为一个核心价值。

不错的博客文章

NPM 与纱线作弊单”作者: Gant Laborde

略长版本 从项目:

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

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

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

来自 README.md:

  • 脱机模式: 如果您已经安装了一个软件包之前,您可以再次安装它没有任何互联网连接。
  • 确定性: 无论安装顺序如何,相同的依赖项将以相同的方式在每台计算机上安装。
  • 网络性能: 有效地对请求进行排队,避免请求瀑布,以最大限度地提高网络利用率。
  • 多注册中心: 从 npm 或 Bower 安装任何包,并保持您的包工作流相同。
  • 网络弹性: 单个请求失败不会导致安装失败。请求在失败后重试。
  • 平面模式: 解决依赖项版本与单个版本不匹配的问题,以避免创建重复。
  • 更多表情符号。

当你安装一个使用纱线包(使用纱线添加包名) ,它 把软件包放在你的磁盘上。在下一次安装期间,将使用此包代替发送 HTTP 请求从注册中心获取 tarball。

纱带有一个 方便的执照检查员,它可以成为真正强大的情况下,您必须检查所有模块的许可证,您所依赖的。

如果你正在研究专有软件,那么你使用哪一种并不重要。使用 npm,您可以使用 npm-crinkwraph。Js,你可以用 Yarn.lock 和 Yarn.lock。

欲了解更多信息,请阅读以下博客

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

什么是 PNPM?

pnpm使用硬链接和符号链接在磁盘上只保存一次模块的一个版本。例如,当使用 npm 或 Yarn 时,如果有100个项目使用相同版本的 loash,那么磁盘上将有100个 loash 副本。使用 pnpm,loash 将被保存在磁盘上的一个单独位置,并且一个硬链接将把它放到应该安装它的 node _ module 中。

因此,您在磁盘上节省了十亿字节的空间,并且安装速度快得多!如果您想了解更多关于 pnpm 创建的惟一 node _ module 结构以及它为什么能够在 Node.js 生态系统中很好地工作的细节,请阅读这篇小文章: 我们为什么要使用 pnpm?

如何安装 PNPM?

npm install -g pnpm

如何使用 PNPM 安装 npm 包?

pnpm install -g typescript // or your desired package

PNPM相对于 YarnNPM的益处

下面是进度条,显示了 NPMYARNPNPM所花费的安装时间(进度条越短越好) enter image description here

点击完成检查基准

详情请浏览 https://www.npmjs.com/package/pnpm

试图给初学者一个更好的概述。

历史上(2010年) npm 一直是 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 init

这将创建一个 package.json文件:

yarn install

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

如果使用 Npm开始一个项目,实际上可以很容易地迁移到 纱线。纱线将消耗相同的 package.json。有关详细信息,请参阅 从 npm 迁移

然而,随着每个新版本的发布,Npm得到了改进,一些项目仍然使用 Npm而不是 纱线

Npm :

  1. Npm 的包管理器是命令行 接口到 npm 生态系统。它是战斗测试,令人惊讶 并且被成千上万的 JavaScript 开发人员使用 每一天。
  2. NPM 生成一个正确的锁定文件,而纱线锁定文件可以是 在某些情况下腐败,必须用纱线工具固定

纱线 :

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

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

纱线

优点:

  • 支持诸如并行安装和 零-安装导致更好的性能

  • 更安全

  • 大型活跃用户社区

缺点:

  • 不适用于旧版本的 Node.js (低于版本5)

  • 安装本机模块时出现的问题

NPM

优点:

  • 易于使用,特别是对于使用较老版本的开发人员 版本。

  • 优化本地软件包安装,节省硬盘空间。

缺点:

  • 安全漏洞依然存在

结论:

纱线比 NPM 好吗?

在速度和性能方面,纱线优于 NPM,因为它执行并行安装。纱线仍然比 NPM 更安全。然而,纱线使用更多的磁盘空间比 NPM。