pnpm 入门与实践指南

pnpm 入门与实践指南

一个高效、快速、节省磁盘空间的 Node.js 包管理器替代方案。

为什么选择 pnpm?

  • 🧩 节省磁盘空间:pnpm 通过硬链接共享依赖,避免重复安装。
  • 🚀 安装速度更快:相比 npm/yarn 更高效。
  • 🔐 默认严格依赖:避免隐式依赖,项目更稳定。
  • 🛠️ 更好的工作区支持:内建 monorepo 管理工具,媲美 Lerna + Yarn Workspaces。

安装 pnpm

你可以通过 npm 安装 pnpm:

bash 复制代码
npm install -g pnpm

或者使用 corepack(Node.js >= 16.13.0):

bash 复制代码
corepack enable
corepack prepare pnpm@latest --activate

验证版本:

bash 复制代码
pnpm -v

常用命令对比

操作 npm yarn pnpm
安装依赖 npm install yarn pnpm install
添加依赖 npm install lodash yarn add lodash pnpm add lodash
添加 dev 依赖 npm install -D typescript yarn add -D typescript pnpm add -D typescript
删除依赖 npm uninstall lodash yarn remove lodash pnpm remove lodash
清空缓存 npm cache clean --force yarn cache clean pnpm store prune

使用 pnpm workspace 管理 Monorepo

pnpm 原生支持 monorepo,创建项目结构如下:

复制代码
my-monorepo/
├── package.json
├── pnpm-workspace.yaml
└── packages/
    ├── a/
    └── b/

根目录 package.json

json 复制代码
{
  "name": "my-monorepo",
  "private": true,
  "workspaces": ["packages/*"]
}

pnpm-workspace.yaml

yaml 复制代码
packages:
  - 'packages/*'

常见问题与解决方案

Q: 项目引用未生效?

A: 确保在根目录运行 pnpm install,而非子项目。

Q: 某些依赖无法安装?

A: 尝试加上 --shamefully-hoist 参数兼容旧项目:

bash 复制代码
pnpm install --shamefully-hoist

小技巧

只更新部分包

bash 复制代码
pnpm update <package-name>

执行子包命令

bash 复制代码
pnpm -F <package-name> run <script>

总结

如果你正在为项目安装慢、node_modules 体积大、依赖错乱等问题困扰,pnpm 是非常值得尝试的解决方案。它的设计理念与性能优化让它在现代前端工程中表现出色,特别适合 Monorepo 场景。


参考链接

相关推荐
P***25392 天前
前端构建工具缓存清理,npm cache与yarn cache
前端·缓存·npm
好奇的菜鸟2 天前
解决 npm 依赖版本冲突:从 “unable to resolve dependency tree“ 到依赖管理高手
前端·npm·node.js
猿小猴子3 天前
Node 的版本管理工具 nvm 介绍
npm·node·nvm
jenchoi4133 天前
【2025-11-12】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全·npm
jenchoi4133 天前
【2025-11-13】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全·npm
百***78453 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js
菠萝+冰3 天前
npm中-d -g 和默认安装的区别
前端·npm·node.js
jenchoi4134 天前
【2025-11-11】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·安全·web安全·网络安全·npm
百***92654 天前
Node.js npm 安装过程中 EBUSY 错误的分析与解决方案
前端·npm·node.js
百***35334 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js