本地用 pnpm 省磁盘,团队继续用 npm:极简实践
团队继续用 npm,Docker 流程不变。想省磁盘的人在自己电脑上装个 pnpm,跑几条命令即可。pnpm 产生的文件都留在本地,不提交 Git,不影响任何人。
为什么要这么做
pnpm 的磁盘节省来自全局内容寻址存储 + 硬链接 :同一个包在所有 pnpm 项目之间,文件内容只存一份 ,每个项目的 node_modules 里只是多了一个指向它的硬链接。项目越多、重复依赖越多,节省越明显。
这套方案的原则只有一条:
pnpm 产生的一切文件,都不进 Git;Git 里只保留团队原有的 package-lock.json。
这样,愿意尝试的人能立刻享受磁盘节省,不换的人继续用 npm,双方互不干扰。
一、首次安装(每人一次)
bash
npm install -g pnpm
验证:
bash
pnpm -v
二、在项目中首次迁移(每人一次,项目根目录执行)
1. 基于团队 package-lock.json 生成本地 pnpm 锁文件
bash
pnpm import
pnpm import 会自动读取当前目录的 package-lock.json,生成 pnpm-lock.yaml,保证依赖版本与团队 npm 对齐。不要写成 pnpm import package-lock.json,该命令不接受文件路径参数。
2. 用 pnpm 安装依赖
bash
pnpm install
3. 如果报 ERR_PNPM_IGNORED_BUILDS
pnpm 出于安全考虑默认拦截未审批的构建脚本(如 esbuild、vue-demi)。执行:
bash
pnpm approve-builds --all
pnpm install
4. 确保 .gitignore 忽略 pnpm 文件
在 .gitignore 中加入:
gitignore
pnpm-lock.yaml
pnpm-workspace.yaml
不要忽略
package-lock.json,它仍然是团队共享的唯一锁文件。
三、日常同步团队更新
当有人用 npm 更新了依赖并推送了新的 package-lock.json 后,你在本地执行:
bash
git pull
pnpm import
pnpm install
每次 git pull 后先 pnpm import,再 pnpm install,这是保证你本地依赖与团队 npm 版本严格一致的关键习惯。
四、命令速查
| 场景 | 命令 |
|---|---|
| 全局安装 pnpm | npm install -g pnpm |
| 查看版本 | pnpm -v |
基于 package-lock.json 生成本地锁文件 |
pnpm import |
| 安装依赖 | pnpm install |
| 批准构建脚本 | pnpm approve-builds --all |
五、对 Docker / 部署流程的影响:零
这套方案不要求修改 Dockerfile 。Docker 构建时读取的是 package-lock.json,继续使用 npm ci 即可。pnpm-lock.yaml 和 pnpm-workspace.yaml 都不进 Git,Docker 构建上下文里不会出现它们,现有部署流程完全不变。
六、给同事的一句话
继续用 npm 没问题。想省磁盘的人装个 pnpm,跑
pnpm import和pnpm install,之后每次git pull后重新pnpm import一下即可。pnpm 文件都在本地,不提交,不影响 npm,也不影响 Docker。
总结
- 团队共享锁文件:
package-lock.json - 本地 pnpm 锁文件:
pnpm-lock.yaml,通过.gitignore忽略 - 本地 pnpm 配置:
pnpm-workspace.yaml,通过.gitignore忽略 - 每次拉取团队代码后:
pnpm import→pnpm install - Docker / 部署:继续
npm ci,零改动