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