yarn和npm之间的主要区别是什么?
我想问一下您最喜欢JS的软件包管理器是什么?我看到了一些关于yarn和npm的文章。但是我不确定有什么对我更好。我刚刚开始学习JS。
现在,yarn和npm之间的差异对我来说就像可乐品牌之间的差异。
回答:
有时候我们只有一个,npm
但是解决依赖性和缓存问题太多,以至于另一个工具诞生了(yarn
)。通常,它使用本地缓存来解决依赖关系,例如,在运行几乎总是在同一环境中运行的CI作业时,这非常关键,并且当您为云服务中的数据付费时,高带宽非常昂贵。这意味着在旧npm
版本中,当您奔跑npm
install而让部
yarn
请理解,它们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
版本锁定
如之前所述,在每次安装后都会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
决定将破折号打破版本时1.2.0
,会发生的事情是,npm
在过去,可以获取同一库的2个不同实例,以及2个不同的版本,这可能导致极其奇怪的行为。因为你没有你的模块中准确锁定(你接受任何semver版本^
1.XX和^
2.xx的这样就意味着两个子模块将满足您的要求,但获取不同的版本。纱将锁定yarn.lock
在当时向该项目添加新软件包,这意味着当项目中的其他开发人员签出该项目时,他也将拥有该软件包yarn.lock
,yarn
并最终“模仿”软件包的状态(当您yarn.lock
以其他方式提交时,如何安装它们)NPM
只是希望获得满意的服务,并且可以为2个开发人员获取2个不同的版本(假设及时升级了软件包)
最后说明
刚npm
发布时npm@5
,有很多工作要做,我认为所有陈述现在都只是yarn
创建WHY的原因以及当时正在解决的问题,但我认为目前为止,这两个之间的区别不大
以上是 yarn和npm之间的主要区别是什么? 的全部内容, 来源链接: utcz.com/qa/419024.html