前端框架pnpmnpm

pnpm 替换 npm:迁移步骤与常见坑

从 lockfile、node_modules、脚本兼容和 CI 四个方面讲清项目从 npm 迁移到 pnpm 的步骤,并说明什么时候不该启用 shamefully-hoist。

·更新于 ·阅读约 7 分钟·计算中...
pnpm 替换 npm:迁移步骤与常见坑

把项目从 npm 迁到 pnpm,真正要确认的不是“命令怎么敲”,而是 lockfile、依赖布局、CI 和团队协作习惯会不会一起变。大多数前端项目迁移都不复杂,但最常见的坑也很固定:旧锁文件没清理、CI 还在跑 npm、某些包依赖扁平结构,以及把 shamefully-hoist 当默认选项。

目录

什么时候值得迁移到 pnpm

如果你的项目出现这些情况,迁移通常有明显收益:

  • 多项目或 monorepo,依赖重复安装明显
  • node_modules 占空间大、装依赖慢
  • 想要更严格地暴露依赖声明问题

pnpm 官方文档说明 pnpm install 会安装项目依赖,并在 workspace 中默认递归安装所有项目。它的关键特点之一就是共享 store 和更严格的依赖链接。

迁移前先确认三件事

  1. 团队和 CI 都能统一使用 pnpm。
  2. 仓库里没有必须依赖 npm 扁平结构的老包。
  3. 你愿意把 package-lock.json 切换成 pnpm-lock.yaml

如果只是你本机临时想试一下,而团队其余流程仍然是 npm,这不叫真正迁移。

安装 pnpm

macOS:

brew install pnpm

或者已有其他方式管理 Node 环境时,也可以按团队统一方案安装。

一个最稳的迁移顺序

1. 删除 npm 旧产物

rm -rf node_modules package-lock.json

2. 重新安装

pnpm install

pnpm 官方文档说明,pnpm install 会生成或更新 pnpm-lock.yaml,并在 CI 中默认更严格地处理 lockfile 一致性。

3. 把脚本调用切过来

原来:

npm run dev
npm run build

迁移后:

pnpm dev
pnpm build

大多数脚本本身不用改,调用方式和 lockfile 才是关键变化。

CI 里最容易漏的点

如果仓库已经提交了 pnpm-lock.yaml,CI 就不应该继续跑 npm install。pnpm 官方文档写得很明确:CI 环境里如果 lockfile 存在但需要更新,安装会失败;--frozen-lockfile 在 CI 里也默认更严格。

这意味着:

  • 本地和 CI 必须用同一种包管理器
  • lockfile 要跟代码一起评审
  • 不要一边提交 pnpm-lock.yaml,一边让流水线继续跑 npm

shamefully-hoist 什么时候才该开

pnpm 官方文档把 --shamefully-hoist 描述为创建类似 npm / yarn 的扁平 node_modules 结构,并明确标注为“highly discouraged”。

也就是说:

  • 它是兼容开关,不是推荐默认值
  • 只有当你确认某些历史依赖确实要求扁平结构时再开
  • 最好先定位具体包,再决定是否局部或暂时妥协

如果一迁移就直接打开它,你就把 pnpm 很多约束价值抵消掉了。

常见问题

安装卡住或异常慢

先看网络、registry、磁盘空间,再考虑缓存:

pnpm store prune
df -h

lockfile 频繁变化

先确认团队 pnpm 版本是否一致,再看是否有人混用 npm / yarn。

某些包找不到依赖

这通常不是 pnpm “坏了”,而是包本身依赖声明不规范,过去只是被 npm 的扁平结构掩盖了。

和 npm、yarn 对比时别混成一件事

这篇是迁移指南,不是三者全面对比。如果你是在评估工具选择而不是执行迁移,更适合看 pnpm vs npm vs yarn 对比

结论

  • 迁移核心不是改命令,而是统一 lockfile、CI 和团队习惯。
  • pnpm install 后要让 pnpm-lock.yaml 成为唯一锁文件来源。
  • shamefully-hoist 只能当兼容兜底,不该作为默认配置。

参考资料

9 分钟

pnpm 实战使用指南:从安装、迁移到 Workspace

pnpm 适合同时维护多个前端项目的开发者。它通过全局内容寻址存储复用依赖,能减少 node_modules 占用、提升安装速度,并用更严格的依赖结构减少幽灵依赖问题。

8 分钟

pnpm vs npm vs yarn: 对比、优缺点及使用方法

最常见的包管理工具有 npm、yarn 和 pnpm,它们都能帮助开发者管理项目的依赖包,并提供丰富的功能。不过,它们的工作原理有所不同,每个工具在性能、磁盘空间利用、依赖管理等方面都有优缺点。

18 分钟

理解与掌控副作用:前端开发(Vue 3 和 React)中的关键环节

在现代前端开发中,副作用(Side Effects)是一个经常被提到的概念。它指的是那些在执行计算或操作时,不仅影响当前函数的输出,还可能对外部世界产生某些影响的操作。常见的副作用包括:数据请求、事件监听、定时器、DOM 操作等。处理副作用是前端开发中非常重要的一部分,尤其是在构

订阅 FreeMac

每周精选:免费 Mac 软件评测、可信来源更新、替代方案和少折腾指南。