功能比较
| 功能 | pnpm | Yarn | npm | 备注 |
|---|---|---|---|---|
| 工作空间支持 | ✅ | ✅ | ✅ | |
隔离的 node_modules | ✅ | ✅ | ✅ | pnpm 中的默认值。 |
提升的 node_modules | ✅ | ✅ | ✅ | npm 中的默认值。 |
| Plug'n'Play | ✅ | ✅ | ❌ | Yarn 中的默认值。 |
| 自动安装对等依赖 | ✅ | ❌ | ✅ | |
| 零安装 | ❌ | ✅ | ❌ | |
| 修补依赖项 | ✅ | ✅ | ❌ | |
| 管理 Node.js 版本 | ✅ | ❌ | ❌ | |
| 管理自身的版本 | ✅ | ✅ | ❌ | |
| 拥有锁文件 | ✅ | ✅ | ✅ | pnpm-lock.yaml, yarn.lock, package-lock.json。 |
| 支持覆盖 | ✅ | ✅ | ✅ | 在 Yarn 中称为“resolutions”。 |
| 内容可寻址存储 | ✅ | ✅ | ❌ | 当 nodeLinker 设置为 pnpm时,Yarn 使用 内容可寻址存储。 |
| 动态包执行 | ✅ | ✅ | ✅ | pnpm dlx, yarn dlx, npx。 |
| 副作用缓存 | ✅ | ❌ | ❌ | |
| Catalogs | ✅ | ❌ | ❌ | |
| 配置依赖项 | ✅ | ❌ | ❌ | |
| JSR 软件源支持 | ✅ | ✅ | ❌ | |
| 脚本运行前自动安装 | ✅ | ❌ | ❌ | 在 Yarn 中,即插即用(Plug'n'Play)可确保依赖项始终保持最新。 |
| 钩子 | ✅ | ✅ | ❌ | |
| 列出许可证 | ✅ | ✅ | ❌ | pnpm 通过 pnpm licenses list 支持它。 Yarn 有一个插件来支持这个功能。 |
注意: 为了保持相对简洁,我们只包含可能会经常使用的功能。