# 项目从npm到pnpm
Vite + Vue 3 项目从 npm 切换到 pnpm 是非常常见且推荐的做法。pnpm 速度更快、磁盘空间占用更少(通过硬链接共享 node_modules),尤其适合中大型项目。
# 切换步骤(超级简单,基本无风险)
删除旧的锁文件和 node_modules
rm -rf node_modules rm package-lock.json # npm 的锁文件,必须删 # 如果有 yarn.lock 也删掉(虽然你用的是 npm) rm yarn.lock 2>/dev/null || true安装 pnpm(如果你还没装)
# 推荐方式(官方推荐) npm install -g pnpm # 或者用 corepack(Node.js 16.13+ 自带) corepack enable corepack prepare pnpm@latest --activate用 pnpm 重新安装依赖
pnpm install第一次执行会自动生成两个新文件:
pnpm-lock.yaml(pnpm 的锁文件,以后要提交到 git)pnpm-workspace.yaml(如果有 monorepo 才会生成,单项目一般没有)
修改 package.json 中的脚本(推荐,但不是必须) pnpm 支持直接用
pnpm dev、pnpm build等代替pnpm run xxx,但为了保持和原来一致,建议把 scripts 改成支持两者:{ "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview" } }这样你既可以用
npm run dev(其实调用 pnpm),也可以直接pnpm dev,都很方便。提交到 git(重要!)
git add pnpm-lock.yaml git rm package-lock.json # 如果你想强制团队都用 pnpm,可以加 .npmrc 文件 echo "lockfile: true" > .npmrc echo "node-linker=hoisted" >> .npmrc # 可选:让 node_modules 结构更接近 npm,便于一些工具兼容
# 团队协作注意事项
- 告诉团队成员也切换到 pnpm,或者至少让他们删掉 package-lock.json,只保留 pnpm-lock.yaml。
- 如果有人还是用 npm install,会重新生成 package-lock.json,容易造成锁文件冲突。解决办法:
- 在项目根目录加一个
.npmrc文件:这样即使有人用 npm 安装,也不会生成 package-lock.json。package-lock=false lockfile=false
- 在项目根目录加一个
# 切换后你会立刻感受到的好处
pnpm install通常比 npm 快 2-5 倍- 多个项目共享同一个依赖存储(全局 store),磁盘空间大幅节省
- 更严格的依赖解析,避免 phantom dependencies(幻影依赖)
# 总结:一句话操作
rm -rf node_modules package-lock.json && pnpm install
📌可能遇到问题:
下载慢?
换镜像(推荐):用淘宝镜或腾讯镜加速。
在项目根目录的 .npmrc 文件里加:
registry=https://registry.npmmirror.com/
或者临时命令:pnpm install --registry https://registry.npmmirror.com
如果不想看警告,可以调高阈值(在 .npmrc 加):
textfetch-min-speed-kibps=10 # 把最低速度调低
fetch-warn-timeout-ms=30000 # 把超时警告调到30秒