纱线与npm的主要区别是什么?

时间:2018-05-10 17:40:39

标签: javascript node.js npm yarnpkg

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

现在纱线和npm之间的区别对我来说就像可乐品牌之间的差异一样。

1 个答案:

答案 0 :(得分:18)

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

首先注意

请理解yarn构建于npm个软件包和https://www.npmjs.com/之上,这意味着他们都使用NPM注册表来解析软件包。因此,如果您运行npm install lodash@1.0.0.yarn add lodash@1.0.0.,您将获得完全相同的结果

增量安装

lodash@1.0.0 react@16.0.0

在每个新构建中,两个依赖项再次从Internet下载。 Yarn使用下面的yarn.lock并将您的package.json文件与yarn.lock进行比较,并确定需要另外提取哪些包以仅逐步安装新的依赖项

多线程

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

降低到1/10

版本锁定

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

app - 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,这意味着两个子模块都可以满足你的要求但是获取不同的版本。纱线将锁定你的{{ 1}}在向项目添加新包时,这意味着当项目中的其他开发人员签出项目时,他也将拥有相同的yarn.lockyarn.lock最终将模仿"模仿& #34;当你在其他人yarn上提交yarn.lock时,包的状态如何只是看起来满意,并且可以为2个开发人员提取2个不同的版本(假设时间包正在升级)

最后的注释

他们发布NPM时,npm人已经做了很多工作,我认为现在所有的陈述都是npm@5创建的原因以及它在时间,但我认为在当前日期,现在这两者之间没有太大的区别

相关问题