功能比较
功能 | 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 有一个插件来支持这个功能。 |
注意: 为了保持相对简洁,我们只包含可能会经常使用的功能。