yarn和npm之间的主要区别是什么?

发布于 2021-01-31 23:14:35

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

现在,yarn和npm之间的差异对我来说就像可乐品牌之间的差异。

关注者
0
被浏览
179
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    有时候我们只有一个,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.lockyarn并最终“模仿”软件包的状态(当您yarn.lock以其他方式提交时,如何安装它们)NPM
    只是希望获得满意的服务,并且可以为2个开发人员获取2个不同的版本(假设及时升级了软件包)

    最后说明

    npm发布时npm@5,有很多工作要做,我认为所有陈述现在都只是yarn创建WHY的原因以及当时正在解决的问题,但我认为目前为止,这两个之间的区别不大



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看