6月2日 01:43

npm、Yarn 和 pnpm 怎么选?2025 年包管理器对比

npm 和 Yarn 都是 JavaScript 包管理器,做的事情一样(安装依赖、管理版本、运行脚本),区别在于速度、稳定性和锁文件机制。2025 年的实际情况:npm 够用,pnpm 值得切换,Yarn 1 已过时。

核心差异

维度npmYarn 1 (Classic)Yarn 2+ (Berry)pnpm
锁文件package-lock.jsonyarn.lockyarn.lockpnpm-lock.yaml
安装速度最快
离线安装缓存但需网络支持支持支持
Monorepoworkspaces (npm 7+)workspacesworkspacesworkspaces
磁盘占用低(硬链接)
Plug'n'Play不支持不支持支持不支持

Yarn 曾经的优势,npm 已经追平

Yarn 1 在 2016 年发布时碾压 npm:确定性安装(yarn.lock)、并行下载、离线缓存。但 npm 5+ 引入了 package-lock.json,npm 7+ 加了 workspaces,核心差距已经很小。

2025 年不建议新项目用 Yarn 1。它已经停止维护(最后版本 1.22.x),安全漏洞不会修复。

Yarn 2+ (Berry):激进但有代价

Yarn Berry 引入了 Plug'n'Play(PnP)——不生成 node_modules,用 .pnp.cjs 文件映射包路径。好处是安装快、磁盘占用小。代价是很多依赖 node_modules 的工具不兼容,需要额外配置。

零安装(Zero-Install)是 Berry 的另一个特性——把 .yarn/cache 提交到 Git,clone 后不用 npm install 直接开发。对小团队方便,但 cache 目录会让 Git 仓库膨胀。

实际采用率不高——PnP 的兼容性问题导致迁移成本大,很多团队试了又切回 npm。

pnpm:当前最值得切换的方案

pnpm 用硬链接替代复制——所有项目共享同一份包文件,磁盘占用只有 npm 的 1/3 到 1/5。安装速度也最快(比 npm 快 2-3 倍)。

bash
npm install -g pnpm pnpm install # 替代 npm install pnpm add react # 替代 npm install react pnpm run dev # 替代 npm run dev

pnpm 的严格模式(非扁平的 node_modules)避免了幽灵依赖——你只能 import 声明过的包,不会意外引用到间接依赖。这对项目长期维护是好事,但迁移老项目时可能暴露隐藏的依赖问题。

怎么选

  • 新项目:pnpm(磁盘省、速度快、严格依赖)或 npm(零配置、生态兼容性最好)
  • 已有项目用 npm:没必要迁移。npm 够用,迁移收益不大
  • 已有项目用 Yarn 1:建议迁移到 pnpm 或 npm。Yarn 1 不再维护
  • 已有项目用 Yarn Berry:如果 PnP 工作正常就继续用,没有问题就不要换

一句话:没有强需求就不要换包管理器。迁移成本 > 收益的情况很常见。

标签:NPM