yarn vs. npm

135 阅读2分钟

《用得上的前端知识》系列 - 你我都很忙,能用100字说清楚,绝不写万字长文

基本概念

Yarn:由Facebook、Google、Exponent 和 Tilde 联合推出的一个新的 JS 包管理工具(为了弥补 npm 的一些缺陷而出现)。

  • yarn 根据 package.json 安装完模块后会在本地生成 yarn.lock 文件;
  • npm 根据 package.json 安装完模块后会在本地生成 package-lock.json 文件;
  • yarn.lock 和 package-lock.json 记录着模块的确切版本号,有了该文件,再次安装时,是根据 lock 文件记录的模块版本进行安装。

npm 的缺陷

  • npm install 的时候巨慢
  • 同一个项目,安装的时候无法保持一致性(由于package.json文件中版本号的特点,下面三个版本号在安装的时候代表不同的含义);
    • "5.0.3"
    • "~5.0.3"
    • "^5.0.3"
  • 安装的时候,中途如果某个包抛出了一个错误,npm 会继续下载和安装包,错误信息容易被一大堆 npm 日志淹没,不利于错误的排查和解决。

Yarn 的优点

  • 速度快;
  • 并行安装;
    • npm 是按照队列执行每个 package;
    • 而 Yarn 是异步执行所有任务。
  • 离线模式,重复安装某个包时,将直接从缓存中获取,不必再从网络下载;
  • 安装版本统一,Yarn 使用一个锁定文件 (lock file) 记录了被确切安装上的模块的版本号;
  • 更简洁的输出,结合了 emoji 直观且直接地打印出必要的信息,也提供了一些命令供开发者查询额外的安装信息;
  • 多注册来源处理:所有的依赖包,不管他被不同的库间接关联引用多少次,安装这个包时,只会从一个注册来源去装,要么是 npm 要么是 bower;
  • 更好的语义化: yarn改变了一些 npm 命令的名称,比如 yarn add/remove。

补充:

  • 在npm 5.0 之前,yarn 的优势特别明显;
  • 但是在npm 5.0 之后,在速度和使用上确实有了很大提升,不过还没有超过 yarn。

参考资料