npm和yarn哪里不一样

npm和yarn哪里不一样

npm是啥?

npm是javascript的包管理工具,是前端模块化下的一个标志性产物。简单地说,就是通过npm下载模块,复用已有的代码,提高工作效率。

其实在最早期的npm版本(npm v2),npm的设计可以说是非常的简单,在安装依赖的时候会将依赖放到 node_modules文件中。

安装机制

  • npm install执行之后, 首先会检查和获取 npm的配置
    优先级为: 项目级的.npmrc文件 > 用户级的 .npmrc文件 > 全局级的 .npmrc > npm内置的 .npmrc 文件
  • 检查项目中是否有 package-lock.json文件
    • 有, 检查 package-lock.json和 package.json声明的依赖是否一致:
      • 一致, 直接使用package-lock.json中的信息,从网络或者缓存中加载依赖
      • 不一致

      npm version <= v5.0.x 根据package-lock文件下载,
      npm version v5.1.5-v5.4.2 当package.json声明的依赖版本规范有符合的版本时,会忽略lock文件。安装package.json安装,并在安装后更新lock文件。
      npm version >= v5.4.2 当package.json声明的依赖版本规范和lock文件中的版本对比,相符合则按照lock文件安装依赖,若不符合则按照package.json安装,并在安装后更新lock文件。

    • 没有 根据package.json递归构建依赖树
  • 根据依赖树检索是否有缓存
    • 有 直接获取缓存中的依赖解压到 node_modules
    • 没有 从npm远端仓库下载包,校验包的完整性,同时添加到缓存中,解压到 node_modules
  • 生成 package-lock.json 文件

缺点

  • 速度慢
  • 安装的无法保持一致性
  • 存在嵌套地狱
  • 输出冗长

优点

官方推荐

yarn是啥?

yarn 是一个由Facebook、Google、Exponent和Tilde构建的新的JavaScript包管理器。它的出现是为了解决历史上npm的某些不足

安装机制

  • 检测(checking)
    检测我们的项目中是否存在npm相关的文件,比如package-lock.json等;如果有,就会有相关的提示用户注意:这些文件可能会存在冲突。在这一步骤中 也会检测系统OS, CPU等信息
  • 解析包(Resolving Packages)
    析依赖树中的每一个包的信息
    • 获取首层依赖
      dependencies、devDependencies、optionalDependencies
    • 获取包的依赖信息
      遍历首层依赖的方式
  • 获取包
  • 链接包
  • 构建包

优点

  • 并行安装
  • 离线安装
  • 版本统一
  • 输出简洁
  • 更好的语义化

参考 https://juejin.cn/post/7060844948316225572

posted @   skylei  阅读(60)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示