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

32 javascript node.js npm yarnpkg

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

现在纱线和npm之间的区别对我来说就像可乐品牌之间的区别.

Mil*_*sky 37

有时我们只有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.你会得到相同的结果

增量安装

yarn.lock

在每个新构建中,两个依赖项再次从Internet下载.Yarn package.json在底层使用并且它正在比较您的yarn.lock文件yarn并确定需要另外获取哪些包以仅增量安装新的依赖项

多线程

npm install提供并行安装不依赖于线程的包.它可以将安装时间缩短到1/10yarn

版本锁定

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

1.2.0

想象一下,当维护者npm决定将lodash碰到破坏更改版本时yarn.lock,可能会发生的情况是,yarn.lock过去可能会获取同一个库的2个不同实例,以及2个不同版本可能导致非常奇怪的行为.因为你的模块中没有确切的锁定(你接受任何semver版本^ 1.xx和^ 2.xx,这意味着两个子模块都能满足你的要求,但是获取不同的版本.纱线将锁定你的yarnAT时间添加项目的新软件包,这意味着当项目中的其他开发人员检查项目时,他也将拥有相同的内容yarn.lock,NPM最终将"模仿"软件包的状态,当你npm在其他人手上提交它们时,npm@5只需查看semver满意,并可以为2个开发人员获取2个不同版本(假设时间包正在升级)

最后的说明

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

  • 几天前,我在其他地方回答了类似的问题,只是一个巧合,没有从无处复制:) (2认同)