# 包管理工具

常见包管理工具有如下

  • npm
  • cnpm
  • yarn
  • pnpm

推荐项目使用pnpm

# npm

npm 全称为 node package manager,即 node 包管理器

# 依赖管理

npm1、npm2采用递归管理,npm3、npm3+依赖扁平化管理消除依赖提升

# cnpm

cnpm的出现主要是解决国内用户连接npm registry缓慢的问题,淘宝自建的镜像源,下载速度相对快一些

新的npm版本已经支持修改registry改为淘宝镜像源

# yarn

yarn的出现主要是解决旧版npm存在的问题。在新版npm中,可以说npm已经和yarn非常接近,甚至没有差距了。

# 解决方法

  • 使用扁平的目录结构
  • 并行下载
  • 使用本地缓存
  • 控制台仅输出关键信息
  • 使用yarn-lock文件记录确切依赖

# 优化的内容

  • 增加了某些功能强大的命令
  • 让既有的命令更加语义化
  • 本地安装的CLI工具可以使用 yarn 直接启动
  • 将全局安装的目录当作一个普通的工程,生成package.json文件,便于全局安装移植

# pnpm

pnpm 仍然使用缓存来保存已经安装过的包,以及使用 pnpm-lock.yaml 来记录详细的依赖版本

# 依赖管理

  • 消除依赖提升
  • 规范拓扑结构

# 特点

  • 速度快
  • 节约磁盘空间
  • 支持monorepo
  • 安全性高

pnpm 相比较于 yarn/npm 这两个常用的包管理工具在性能上也有了极大的提升,根据目前官方提供的 benchmark 数据可以看出在一些综合场景下比 npm/yarn 快了大概两倍。