在早期,我们只需要忍受 node_modules 这个“宇宙最重物质”。但到了今天,包管理器已经演化出了完全不同的架构哲学。选择哪一个,本质上是在安装速度、磁盘空间、依赖严谨性以及团队习惯之间做权衡。
以下是针对 npm、yarn (Berry) 、pnpm 和 Bun 的深度对比及选型建议。
| 特性 | npm (v11+) | pnpm (v10+) | Yarn (v4+ Berry) | Bun (v1.3+) |
|---|---|---|---|---|
| 安装速度 | 🐢 较慢 (逐步优化中) | ⚡ 极快 (硬链接机制) | ⚡ 快 (PnP 模式下秒开) | 🚀 离谱快 (原生 C++/Zig 实现) |
| 磁盘占用 | 💾 极高 (每个项目一份) | 🍃 极低 (全局内容寻址) | 🍃 低 (PnP 压缩存储) | 💾 中等 (类似 npm) |
| 幽灵依赖 | ⚠️ 存在 (扁平化架构) | ✅ 彻底杜绝 (严格隔离) | ✅ 彻底杜绝 (PnP 模式) | ⚠️ 存在 (默认兼容模式) |
| Monorepo | 基础支持 | 行业标配/最强 | 深度支持 (插件丰富) | 基础支持 (主打速度) |
| 上手难度 | 🟢 零门槛 | 🟡 较低 | 🔴 较高 (PnP 兼容性) | 🟢 极低 |