在现代前端开发中,包管理工具是不可或缺的。最常见的包管理工具有 npm
、yarn
和 pnpm
。其中,pnpm
以其高效的磁盘利用率和更快的安装速度受到越来越多的开发者青睐。
本文将对比 pnpm
和 npm
,并介绍 pnpm
的常见配置及操作。
特性 | pnpm | npm |
---|---|---|
磁盘占用 | 低:采用硬链接和符号链接共享 node_modules ,节省磁盘空间 |
高:每个项目都有完整的 node_modules 目录,占用大量存储 |
安装速度 | 快:复用全局缓存中的依赖,安装速度快 | 相对较慢:每次安装都会复制依赖 |
一致性 | 高:严格依赖 lockfile ,保证一致的依赖树 |
低:依赖解析可能不同,导致 node_modules 结构不同 |
并发性 | 高:默认启用 多线程下载 ,加快安装速度 |
低:npm 默认是单线程下载 |
包管理方式 | 使用全局存储 + 硬链接,避免重复下载 | 直接复制依赖,可能存在冗余 |
结论: 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 setup
pnpm self-update
由于 pnpm
默认使用 npmjs
官方源,国内访问可能较慢。可以切换为 淘宝镜像(npmmirror)
以提高下载速度:
pnpm config set registry https://registry.npmmirror.com
验证是否成功:
pnpm config get registry
如果返回 https://registry.npmmirror.com
,则设置成功。
恢复默认源:
pnpm config delete registry
pnpm init
等同于 npm init
,创建 package.json
。
pnpm install
安装 package.json
中所有依赖。
安装单个依赖(生产环境)
pnpm add axios
安装单个依赖(开发环境)
pnpm add eslint -D
安装指定版本
pnpm add [email protected]
pnpm remove lodash
pnpm run dev
pnpm run build
等同于 npm run dev
。
pnpm add -g pnpm
如果遇到依赖安装问题,可以尝试清理缓存:
pnpm store prune
pnpm store status
可能是 npm 官方源连接失败,解决方案:
pnpm config set registry https://registry.npmmirror.com
pnpm install
如果遇到如下警告:
Ignored build scripts: core-js, esbuild.
Run "pnpm approve-builds" to pick which dependencies should be allowed to run scripts.
执行:
pnpm approve-builds
然后选择要允许的构建脚本。
空格键
(
) 选中 core-js
和 esbuild
回车键
(
) 确认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 |
✅ 速度快(复用缓存 + 多线程下载) ✅ 占用磁盘少(使用 hard links
共享 node_modules
) ✅ 依赖管理更严格(lockfile
机制更优)
如果你正在开发 Vue、React、Node.js 项目,强烈推荐使用 pnpm 来管理依赖!
你学会了吗?如果遇到问题,欢迎留言交流!