yarn 和 npm 的主要区别是啥? [关闭]

Posted

技术标签:

【中文标题】yarn 和 npm 的主要区别是啥? [关闭]【英文标题】:What is main difference between yarn and npm? [closed]yarn 和 npm 的主要区别是什么? [关闭] 【发布时间】:2018-10-21 01:23:48 【问题描述】:

我想问一下你最喜欢的 JS 包管理器是什么? 我看到了一些关于 yarn 和 npm 的文章。但我不确定什么对我更好。我刚开始学JS。

现在 yarn 和 npm 之间的区别对我来说就像可乐品牌之间的区别。

【问题讨论】:

我看了一些文章...但是文章的日期完全不同..所以我在这里询问 yarn 和 npm 用户的实际信息 【参考方案1】:

有时我们只有 npm,但它在解决依赖关系和缓存方面存在很多问题,因此诞生了另一个工具 (yarn)。通常它使用本地缓存来解决依赖关系,例如在运行几乎总是在相同环境中运行的 CI 作业时,这是至关重要的,而且高带宽是昂贵的,因为您为云服务中的数据付费。这意味着在旧的 npm 版本中,当你运行 npm install 并且你有 let in deps 时

第一个注释

请理解yarn 是建立在npm 包和https://www.npmjs.com/ 之上的,这意味着它们都使用NPM 注册表来解析包。所以如果你运行npm install lodash@1.0.0.yarn add lodash@1.0.0. 你会得到完全相同的结果

增量安装

react@16.0.0

在每个新版本中,都会再次从 Internet 下载两个依赖项。 Yarn 在下面使用yarn.lock,它将您的package.json 文件与yarn.lock 进行比较,并确定需要额外获取哪些包以仅增量安装新依赖项

多线程

yarn 提供不依赖于线程的包的并行安装。它可以将安装时间从npm install减少到1/10

版本锁定

如前所述,yarn 在每次安装后生成yarn.lock,它会保留已安装包的所有版本(你可能知道一个包可以有依赖项,一个依赖项也可以有自己的依赖项),因此它可以构建无限树可能导致非常严重的冲突的依赖关系。让我们想象一下这个场景

 - lodash^1
 - super_module@0.0.1
 - - lodash@1.0.0
 - another_module@0.0.01
 - - lodash@1.x.x

想象一下,another_module 的维护者决定将 lodash 升级到破坏性更改版本 1.2.0 可能发生的情况是 npm 在过去可以获取同一库的 2 个不同实例,以及 2 个不同版本,这可能导致非常奇怪的行为。因为您的模块中没有精确锁定(您接受任何 semver 版本 ^1.xx 和 ^2.xx 所以这意味着两个子模块都会满足您的要求但获取不同的版本。Yarn 将锁定您的 yarn.lock AT向项目添加新包的时间,这意味着当您项目中的其他开发人员检查项目时,他也将拥有相同的 yarn.lockyarn 最终将“模仿”包的状态,当您安装它们时提交yarn.lock 另一方面NPM 只是看semver 的满意度,可以为2 个开发人员获取2 个不同的版本(假设及时升级包)

最后说明

npm 的人在发布 npm@5 时做了很多工作,我认为现在所有的陈述都是为什么创建 yarn 以及当时解决了哪些问题的原因,但我认为当前日期,这两个现在没有太大区别

【讨论】:

我几天前在别处回答了类似的问题,只是巧合,没有从任何地方复制:) @epascarello 是的,是的,它是怎么回事......这并不意味着当某人拥有 140k 声誉时,其他人必须创建一个 +15 声誉的帐户......你可以比较 ISP 的帐户或查看我的个人资料……如果我的答案不合法……那太荒谬了。请重新阅读此***.blog/2018/04/26/… 并重新考虑您刚才在该评论中提出的问题。谢谢 我在想 *** 不是那么恶劣的环境,但仍然感谢您的回答:D 最后一点对我很有帮助 npm :javascript 的包管理器。 npm 是 npm 生态系统的命令行界面。它经过实战考验,出奇的灵活,每天被成千上万的 JavaScript 开发人员使用。 Yarn:一个新的 JavaScript 包管理器。 Yarn 会缓存它下载的每个包,因此它永远不需要再次缓存。它还可以并行化操作以最大限度地利用资源,因此安装时间比以往任何时候都快。 我想知道 Webpack 适合在哪里,还有 Yarn 和 NPM...

以上是关于yarn 和 npm 的主要区别是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

yarn.lock 和 npm 的 shrinkwrap 有啥区别?

Yarn和NPM的区别

brew、yarn 和 npm 有啥区别?

“yarn install --frozen-lockfile”的 NPM 等价物是啥?

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

Linux里面YARN作用是啥?