pnpm简介¶
pnpm(Performant npm)是一个高性能、节省磁盘空间的 JavaScript 包管理工具,兼容 npm 和 yarn。
它通过硬链接和符号链接高效管理 node_modules,避免重复安装相同的依赖,显著提升安装速度并减少磁盘占用。
核心特点¶
节省磁盘空间:相同的依赖只会存储一份,避免 npm 和 yarn 复制多个冗余的包。
安装速度快:采用并行下载和增量更新,大幅减少依赖安装时间。
严格依赖隔离:默认使用 hoist=false,确保项目中的 node_modules 结构更加稳定,避免幽灵依赖问题(phantom dependencies)。
自动缓存:已安装的包会存入全局缓存 (~/.pnpm-store),加速未来的安装。
支持 Monorepo:内置 workspaces,适用于管理多个包的项目(如 Lerna)。
更好的安全性:防止 node_modules 中出现不必要的依赖,减少供应链攻击的风险。
设置环境变量¶
手工设置:
PNPM_HOME="~/.pnpm"
PATH="$PNPM_HOME:$PATH"
自动执行(自动修改~/.zshrc文件):
$ pnpm setup
Appended new lines to /Users/zhaoweiguo/.zshrc
Next configuration changes were made:
export PNPM_HOME="/Users/zhaoweiguo/Library/pnpm"
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
To start using pnpm, run:
source /Users/zhaoweiguo/.zshrc
备注
设置好 PNPM_HOME 和 PATH 后才能执行 pnpm add -g <package>
基本使用¶
安装:
npm install -g pnpm
基本使用:
# 初始化项目
pnpm init
# 安装依赖
pnpm install
# 添加依赖
pnpm add <package>
# 全局安装:
pnpm add -g <package>
# 删除依赖:
pnpm remove <package>
# 运行脚本
pnpm run <script>
pnpm vs npm vs yarn:
对比项 pnpm npm yarn
磁盘占用 🥇 最低 高 中等
安装速度 🥇 最高 低 中等
依赖管理 严格 宽松 宽松
Monorepo支持 内置 无 有
并行下载 ✅ 是 ❌ 否 ✅ 是
全局缓存 ✅ 是 ❌ 否 ✅ 是