☰
pnpm 安装与优化指南:节省磁盘空间与提升效率
2026/10/27 5:13:13 网站建设 项目流程

1. 为什么选择 pnpm 而不是 npm/yarn?

如果你已经习惯了 npm 或 yarn,可能会好奇为什么要切换到 pnpm。我在管理多个前端项目时发现,当 node_modules 文件夹开始吞噬硬盘空间时,事情就变得棘手了。pnpm 的核心优势在于它采用了内容可寻址存储(content-addressable storage),这意味着:

  • 所有依赖包只会被存储一次,即使多个项目使用相同版本
  • 通过硬链接(hard links)方式引用依赖,节省 60-70% 的磁盘空间
  • 创建非扁平的 node_modules 结构,避免幽灵依赖(phantom dependencies)问题

实测一个中型项目(约 50 个依赖)的安装对比:

包管理器安装时间占用空间
npm25s210MB
yarn18s195MB
pnpm12s80MB

提示:如果你经常需要同时维护多个 React/Vue 项目,pnpm 的空间节省效果会非常明显。我的开发机上 10 个项目共用 pnpm store 后,node_modules 总大小从 4.2GB 降到了 1.8GB。

2. Ubuntu 环境准备

2.1 系统版本兼容性检查

在开始安装前,先确认你的 Ubuntu 版本是否受支持。通过以下命令查看系统信息:

lsb_release -a

pnpm 对 Ubuntu 的主要版本支持情况:

  • Ubuntu 20.04 LTS (Focal Fossa) - 完全支持
  • Ubuntu 22.04 LTS (Jammy Jellyfish) - 最佳支持
  • Ubuntu 24.04 LTS (Noble Numbat) - 需注意 Node.js 版本要求

注意:如果你看到 "error: this version of pnpm requires at least Node.js v22.13" 这类错误,说明需要先升级 Node.js。我会在 3.2 节详细说明。

2.2 依赖项安装

pnpm 需要一些基础依赖才能正常运行:

sudo apt update sudo apt install -y curl git python3 make g++

这些依赖的作用:

  • curl:用于下载安装脚本
  • git:某些包可能需要从 git 仓库安装
  • python3/make/g++:用于编译原生模块(如 node-sass)

3. 安装 pnpm 的三种方法

3.1 官方脚本安装(推荐)

这是最快捷的安装方式:

curl -fsSL https://get.pnpm.io/install.sh | sh -

安装完成后需要重新加载 shell 配置:

source ~/.bashrc # 如果用 bash # 或 source ~/.zshrc # 如果用 zsh

验证安装:

pnpm --version

避坑指南:如果遇到 "Permission denied" 错误,可能是 ~/.local/share/pnpm 目录权限问题,执行:

sudo chown -R $(whoami) ~/.local/share/pnpm

3.2 通过 npm 安装(适合已有 Node 环境)

如果你已经通过 nvm 等工具安装了 Node.js:

npm install -g pnpm

版本对应关系:

Node.js 版本推荐 pnpm 版本
< 14不推荐
14-166.x
16-187.x
≥ 188.x+

3.3 通过 Corepack 安装(Node.js 16+)

Node.js 16+ 内置了包管理器管理工具:

corepack enable corepack prepare pnpm@latest --activate

4. 环境配置与优化

4.1 存储路径配置

默认情况下 pnpm 将包存储在 ~/.local/share/pnpm/store,你可以通过环境变量修改:

echo 'export PNPM_HOME="/path/to/your/store"' >> ~/.bashrc source ~/.bashrc

我建议将 store 放在大容量分区,特别是如果你使用 SSD 作为系统盘。

4.2 镜像源加速

国内用户建议设置淘宝镜像:

pnpm config set registry https://registry.npmmirror.com/

其他实用配置:

# 设置并发下载数 pnpm config set fetch-retries 5 pnpm config set fetch-timeout 60000 # 禁用自动安装 peerDependencies pnpm config set auto-install-peers false

5. 常见问题解决方案

5.1 权限问题汇总

问题1:EACCES: permission denied, access '/usr/local/lib/node_modules'

解决方案:

# 方法1:使用 --global 时加上 sudo sudo pnpm add -g some-package # 方法2(推荐):重新配置全局目录权限 pnpm setup

问题2:ERR_PNPM_DLX_MULTIPLE_BINS] Could not determine executable to run

这是因为项目中有多个可能的执行入口,明确指定:

pnpm dlx -p @angular/cli ng new project

5.2 版本冲突处理

当遇到类似 "the 'pnpm' field in package.json is no longer read by pnpm" 警告时:

  1. 检查项目根目录的 package.json
  2. 移除或更新过时的 pnpm 配置项
  3. 运行pnpm install --force重置依赖

5.3 与其它工具集成

VSCode 配置: 在 .vscode/settings.json 中添加:

{ "eslint.packageManager": "pnpm", "prettier.packageManager": "pnpm" }

Docker 优化: 在 Dockerfile 中使用 pnpm 的最佳实践:

RUN corepack enable && \ corepack prepare pnpm@latest --activate && \ pnpm install --frozen-lockfile

6. 进阶使用技巧

6.1 工作空间(Workspace)配置

pnpm 的工作空间功能比 npm/yarn 更高效。创建 pnpm-workspace.yaml:

packages: - 'packages/**' - '!**/test/**'

然后可以:

# 安装所有工作区依赖 pnpm install # 在指定包中运行命令 pnpm --filter my-package run dev

6.2 依赖审查与审计

安全审计:

pnpm audit

查看依赖树:

pnpm list --depth 3

批准构建(针对需要编译的依赖):

pnpm approve-builds

6.3 性能优化配置

在 .npmrc 中添加:

prefer-offline=true strict-peer-dependencies=false hoist=false

对于 CI 环境:

pnpm install --shamefully-hoist --frozen-lockfile

7. 完整卸载指南

如果需要完全移除 pnpm:

  1. 删除二进制文件:
rm -rf ~/.local/share/pnpm ~/.local/bin/pnpm
  1. 清理环境变量(编辑 ~/.bashrc 或 ~/.zshrc):
# 删除包含 PNPM_HOME 的行 nano ~/.bashrc
  1. 删除全局安装的包:
rm -rf ~/.pnpm-store
  1. 如果通过 npm 安装,还需要:
npm uninstall -g pnpm

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询