pnpm vs npm:区别与常见操作指南
在现代前端开发中,包管理工具是不可或缺的。最常见的包管理工具有 npm、yarn 和 pnpm。其中,pnpm 以其高效的磁盘利用率和更快的安装速度受到越来越多的开发者青睐。
本文将对比 pnpm 和 npm,并介绍 pnpm 的常见配置及操作。
一、pnpm vs npm:核心区别
| 特性 | pnpm | npm |
|---|---|---|
| 磁盘占用 | 低:采用硬链接和符号链接共享 node_modules,节省磁盘空间 | 高:每个项目都有完整的 node_modules 目录,占用大量存储 |
| 安装速度 | 快:复用全局缓存中的依赖,安装速度快 | 相对较慢:每次安装都会复制依赖 |
| 一致性 | 高:严格依赖 lockfile,保证一致的依赖树 | 低:依赖解析可能不同,导致 node_modules 结构不同 |
| 并发性 | 高:默认启用 多线程下载,加快安装速度 | 低:npm 默认是单线程下载 |
| 包管理方式 | 使用全局存储 + 硬链接,避免重复下载 | 直接复制依赖,可能存在冗余 |
📌 结论: pnpm 更快、更节省磁盘空间,适合中大型项目。
二、如何安装 pnpm
pnpm 可以通过 npm 或 corepack 安装:
# 通过 npm 安装
npm install -g pnpm# 或者使用 corepack(Node.js 16.9+ 支持)
corepack enable
corepack prepare pnpm@latest --activate
安装完成后,验证是否安装成功:
pnpm -v
如果输出 pnpm 的版本号,说明安装成功。
pnpm更新
pnpm setup
pnpm self-update
三、设置 pnpm 镜像源(适用于国内用户)
由于 pnpm 默认使用 npmjs 官方源,国内访问可能较慢。可以切换为 淘宝镜像(npmmirror) 以提高下载速度:
pnpm config set registry https://registry.npmmirror.com
验证是否成功:
pnpm config get registry
如果返回 https://registry.npmmirror.com,则设置成功。
恢复默认源:
pnpm config delete registry
四、常见的 pnpm 操作
1. 初始化项目
pnpm init
等同于 npm init,创建 package.json。
2. 安装依赖
pnpm install
安装 package.json 中所有依赖。
安装单个依赖(生产环境)
pnpm add axios
安装单个依赖(开发环境)
pnpm add eslint -D
安装指定版本
pnpm add lodash@4.17.21
3. 删除依赖
pnpm remove lodash
4. 运行脚本
pnpm run dev
pnpm run build
等同于 npm run dev。
5. 升级 pnpm
pnpm add -g pnpm
6. 清理缓存
如果遇到依赖安装问题,可以尝试清理缓存:
pnpm store prune
pnpm store status
五、解决 pnpm 依赖安装问题
1. 依赖无法下载(404 Not Found 或超时)
可能是 npm 官方源连接失败,解决方案:
pnpm config set registry https://registry.npmmirror.com
pnpm install
2. 依赖安装失败,需要手动批准构建脚本
如果遇到如下警告:
Ignored build scripts: core-js, esbuild.
Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts.
执行:
pnpm approve-builds
然后选择要允许的构建脚本。
- 按
空格键(<space>) 选中core-js和esbuild - 按
回车键(<Enter>) 确认
3. 依赖安装失败,尝试重新安装
rm -rf node_modules pnpm-lock.yaml
pnpm install
这将删除 node_modules 并重新安装所有依赖。
六、总结
| 操作 | npm | pnpm |
| 初始化项目 | npm init | pnpm init |
| 安装所有依赖 | npm install | pnpm install |
| 添加依赖 | npm install axios | pnpm add axios |
| 移除依赖 | npm uninstall axios | pnpm remove axios |
| 运行脚本 | npm run dev | pnpm run dev |
| 切换镜像源 | npm config set registry | pnpm config set registry |
| 清理缓存 | npm cache clean --force | pnpm store prune |
🚀 为什么选择 pnpm?
✅ 速度快(复用缓存 + 多线程下载) ✅ 占用磁盘少(使用 hard links 共享 node_modules) ✅ 依赖管理更严格(lockfile 机制更优)
如果你正在开发 Vue、React、Node.js 项目,强烈推荐使用 pnpm 来管理依赖!🎉
📌 你学会了吗?如果遇到问题,欢迎留言交流!💡
