macOS 上用 pnpm 替代 npm 的核心目标是装得快、占得少、跑得稳;它通过硬链接+全局 store 实现跨项目依赖复用,显著提升多项目、Monorepo 场景下的安装速度与磁盘效率。

在 macOS 上用 pnpm 替代 npm 管理 JavaScript 项目依赖,核心目标是让依赖安装更快、磁盘占用更少、跨项目还原更稳——尤其当你同时维护多个 Vue/React 项目、频繁切换分支或使用 Monorepo 时,npm 每次重装 node_modules 的卡顿和数十 GB 的重复包会明显拖慢开发节奏。
确认 Node.js 环境就绪
pnpm 依赖 Node.js 运行时,版本必须 ≥16.14(推荐 LTS 版本如 v20.x)。若未安装或版本过低,后续所有命令都会报错。
打开终端,执行:node -v。若返回 command not found 或版本低于 16.14,请先安装 Node.js:用 Homebrew 执行 brew install node@20;安装后运行 brew link --overwrite node@20 确保软链接生效。
【注意:M1/M2/M3 芯片 Mac 默认路径为 /opt/homebrew/bin,务必确认 brew install 输出中 node 二进制文件位置与此一致】
选择一种方式安装 pnpm
方法一:Homebrew 安装(推荐,权限干净、路径自动管理)
执行 brew install pnpm。Homebrew 会把二进制文件放入 /opt/homebrew/bin/pnpm(Apple Silicon)或 /usr/local/bin/pnpm(Intel),并自动纳入 PATH。
方法二:官方一键脚本(无需预装 Node.js,但需手动激活)
执行 curl -fsSL https://get.pnpm.io/install.sh | sh -。安装完成后终端会提示类似:export PNPM_HOME="/Users/xxx/Library/pnpm"
此时必须立即执行 source ~/.zshrc(不是 .bashrc!macOS 10.15+ 默认 shell 是 zsh)才能让命令生效。
方法三:npm 全局安装(仅限已有 npm 且路径配置正确者)
执行 npm install -g pnpm。若报 EACCES permission denied,说明 npm 尝试写入系统目录失败——此时不要加 sudo,而是改用用户级安装:mkdir ~/.npm-global && npm config set prefix ~/.npm-global && echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc && source ~/.zshrc,再重试安装。
验证安装并配置国内镜像源
关闭当前终端,新开一个窗口,执行:pnpm -v。能输出类似 9.12.3 的版本号即表示安装成功。
默认 registry 访问极慢,不配置镜像源会导致首次 pnpm install 卡住十分钟以上。立即执行:pnpm config set registry https://registry.npmmirror.com。
验证是否生效:pnpm config get registry,输出应为 https://registry.npmmirror.com。
优化存储路径(可选但强烈建议)
pnpm 默认将全局 store 存在 ~/Library/pnpm-store,但若你主力开发盘是 SSD 且空间紧张,可将其迁移到大容量机械盘或外接硬盘,避免硬链接性能下降。
第一步:创建新存储目录,例如挂载在 /Volumes/Data/pnpm-store;
第二步:执行 pnpm config set store-dir /Volumes/Data/pnpm-store;
第三步:运行 pnpm store prune 清理旧 store 中未被引用的包。
【关键提醒:此操作不会影响现有项目,但迁移后首次 pnpm install 会重新建立硬链接,耗时略长】
开始用 pnpm 替代 npm
初始化新项目:pnpm init → 自动生成 package.json;
安装全部依赖:pnpm install → 自动读取并严格还原 pnpm-lock.yaml;
添加生产依赖:pnpm add axios;
添加开发依赖:pnpm add -D vitest;
运行脚本:pnpm run dev(与 package.json 中定义完全一致)。
你会发现:首次安装比 npm 快 2~5 倍;同一台机器上 10 个项目共用一份 axios@1.6.7,磁盘只存一次;切换项目时 pnpm install 几乎秒完成。


















