有时候我们只有一个,
npm但是解决依赖性和缓存问题太多,以至于另一个工具诞生了(
yarn)。通常,它使用本地缓存来解决依赖关系,例如,在运行几乎总是在同一环境中运行的CI作业时,这非常关键,并且当您为云服务中的数据付费时,高带宽非常昂贵。这意味着在旧
npm版本中,当您奔跑
npminstall而让部
yarn
请理解,它们
yarn是基于
npm软件包和https://www.npmjs.com/的顶部构建的,这意味着它们都使用
NPM注册表来解析软件包。因此,如果您跑步
npminstall 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的原因以及当时正在解决的问题,但我认为目前为止,这两个之间的区别不大



