pnpm 备忘清单:从 npm 迁移、日常操作到 Monorepo 工作区的完整速查指南

发布时间:2026/9/15 13:01:59
pnpm 备忘清单:从 npm 迁移、日常操作到 Monorepo 工作区的完整速查指南
pnpm 备忘清单从 npm 迁移、日常操作到 Monorepo 工作区的完整速查指南【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference本篇技术指南以 reference 项目中 docs/pnpm.md 备忘清单为主体系统梳理 pnpm 与 npm 的命令对照、依赖安装/移除/更新/缓存等日常操作并深入讲解pnpm-workspace.yaml驱动的 Monorepo 工作区用法与高级命令。读完本文你将获得一套可直接复制运行的 pnpm 命令全集能够独立完成从 npm 迁移、依赖管理到多包仓库构建的完整实战闭环。pnpm 是目前前端生态中广受欢迎的高性能软件包管理器其核心特性是使用内容寻址存储Content-Addressable Storage来共享依赖避免多项目重复下载相同版本的包。在 reference 仓库中docs/pnpm.md与 docs/npm.md、docs/package.json.md 共同构成 Node.js 包管理速查系列为开发者提供随查随用的命令清单。pnpm 与 npm 命令对照对于从 npm 迁移到 pnpm 的开发者最关心的莫过于两者命令的对应关系。下表是日常开发中最常用的映射| npm | pnpm | 说明 | | :- | :- | :- | |npm install|pnpm install| 安装依赖 | |npm init|pnpm init| 创建package.json文件 | |npm install package|pnpm add package| 安装包 | |npm install -g package|pnpm add -g package| 全局安装包 | |npm update|pnpm update| 更新包 | |npm cache clean|pnpm cache clean| 清理缓存 |需要留意的是npm install package与pnpm add package并非简单的命令替换npm 中安装新包与按package.json安装全部依赖共用install命令而 pnpm 将两者区分开——新增依赖统一使用pnpm addpnpm install则严格依据package.json与锁文件安装现有依赖。更完整的 npm 常用命令细节可参阅 npm 备忘清单。日常依赖管理命令pnpm list查看已安装的包# 列出所有已安装的包 pnpm list # 列出全局安装的包 pnpm list -g # 查找过时的包 pnpm outdatedpnpm list展示当前项目或全局环境中已安装的依赖树配合--depth参数可以控制展示层级见下文查看包示例。pnpm why追溯依赖来源# 显示为什么安装了某个包 pnpm why package在大型项目中某个依赖往往并非由你直接声明而是被某个间接依赖引入。pnpm why package会输出完整的依赖链帮助你定位该包被哪些包依赖、属于哪一层级是排查幽灵依赖与冗余依赖的重要工具。pnpm install安装依赖及其选项pnpm install依据package.json和pnpm-lock.yaml安装项目全部依赖常用的选项如下| pnpm | 说明 | | :- | :- | |--no-lockfile| 不生成 pnpm-lock.yaml 锁定文件 | |--force| 强制覆盖现有的 node_modules | |--frozen-lockfile| 忽略 pnpm-lock.yaml 中的更改 | |--offline| 离线模式不尝试从远程仓库安装包 | |--shamefully-hoist| 类似于 npm 的 hoist 行为 | |--strict-peer-dependencies| 严格检查 peer dependencies |这些选项可用于pnpm install。它们的典型应用场景包括--frozen-lockfileCI 环境的黄金搭档。在持续集成流水线中锁文件应被视为不可变的事实来源使用该选项可以确保安装结果与锁文件严格一致避免因依赖漂移导致构建不稳定--offline配合 pnpm 的全局内容寻址存储使用当本地缓存已包含所需包版本时即使网络不可用也能完成安装适合离线开发或内网环境--shamefully-hoistpnpm 默认采用符号链接结构仅将直接依赖暴露在node_modules顶层该选项会退化为 npm 式的扁平化 hoist 布局主要用于兼容对平铺结构有依赖的旧工具链--strict-peer-dependencies开启后若 peer dependencies 未满足将直接报错而非默认的警告适合对依赖完整性要求严格的库作者。pnpm add安装新包及其选项pnpm add package用于安装新包并将其写入package.json选项如下| pnpm | 说明 | | :- | :- | |--save| 将包添加到 dependencies | |--save-dev| 将包添加到 devDependencies | |--global| 全局安装包 | |--exact| 安装精确版本号的包 | |--shamefully-hoist| 类似于 npm 的 hoist 行为 | |--strict-peer-dependencies| 严格检查 peer dependencies |这些选项可用于pnpm add。其中--save-dev简写-D将依赖写入devDependencies--exact写入不带^或~的精确版本号--global简写-g则将包安装到全局环境。pnpm update更新依赖# 更新所有包 pnpm update # 更新特定包 pnpm update package # 更新到最新版本包括 major 版本 pnpm update --latest默认情况下pnpm update只会在package.json声明的 semver 范围如^1.0.0内更新到最新小版本只有显式添加--latest才会突破范围限制直接升级到最新版本包括 major 版本的大版本升级升级前建议确认是否存在破坏性变更。pnpm remove移除依赖# 从依赖中删除包 pnpm remove package # 删除全局依赖包 pnpm remove -g create-react-app # 删除特定版本的依赖包 pnpm remove lodash4.17.21pnpm remove会同时更新package.json与pnpm-lock.yaml并清理 node_modules 中不再被引用的符号链接。pnpm remove lodash4.17.21这类指定版本号的写法适用于同一包以多个版本存在于依赖树中的场景。pnpm cache缓存管理# 清理 pnpm 缓存 pnpm cache clean # 查看缓存中所有的包 pnpm cache listpnpm 的全局存储默认位于用户主目录的.pnpm-store以内容寻址方式缓存所有下载过的包这也是 pnpm 安装速度与磁盘利用率优于传统扁平化安装器的根本原因。pnpm cache list可以查看缓存内容当磁盘空间紧张或缓存损坏时使用pnpm cache clean清理。实战示例安装包# 将包添加到“dependencies” pnpm add package # 将包添加到“devDependencies” pnpm add -D package # 将包作为精确版本添加 pnpm add --exact package # 在全局范围内安装包 pnpm add -g package # 安装特定版本的包 pnpm add packageversionpnpm add packageversion支持精确版本号如lodash4.17.21、版本范围如lodash^4.0.0以及 dist-tag如lodashlatest其语法与 npm 保持一致。移除包pnpm remove package # 删除多个依赖包 pnpm remove lodash express # 删除全局依赖包 pnpm remove -g create-react-app # 删除特定版本的依赖包 pnpm remove lodash4.17.21查看包# 列出已安装的包 pnpm list # 列出顶级安装的包 pnpm list --depth 0 # 列出全局安装的包 pnpm list -g # 根据模式和深度列出包 pnpm list --pattern lodash --depth 1--depth 0只显示项目直接声明的顶级依赖--pattern lodash按名称模式过滤二者组合使用可以快速定位某个依赖在依赖树中的具体层级。清除# 清理 node_modules 并删除不必要的文件 pnpm prune # 检查过时的包 pnpm outdatedpnpm prune会移除package.json中未声明却残留在 node_modules 中的包适用于清理历史遗留或误装的依赖。信息# 显示关于安装包的原因的信息 pnpm why package清理缓存# 清除 pnpm 的全局缓存 pnpm cache clean此外您可以指定一个或多个要清理的包例如pnpm cache clean lodash express只清除与指定包相关的缓存条目其余缓存得以保留。Monorepo 工作区实战Monorepo多包仓库是 pnpm 最擅长的领域之一。pnpm 内置工作区workspace支持无需额外安装 lerna 等工具即可在单个仓库中管理多个相互依赖的包。创建 Monorepo 工作区创建一个新的 pnpm 工作区pnpm init -w将在项目的根目录中创建一个pnpm-workspace.yaml文件内容如下packages: - packages/** - apps/**在pnpm-workspace.yaml中定义您的工作区结构packages: - packages/* - apps/*pnpm init -w会生成根目录的package.json与pnpm-workspace.yaml。工作区文件中的packages字段声明了哪些目录属于工作区成员支持 glob 通配符packages/**会递归匹配所有子目录而packages/*只匹配一层。参考仓库本身是一个文档速查项目从 package.json 可以看到它使用refs-cli将docs/*.md编译为静态站点如果你计划把类似的多模块项目组织为 Monorepo上述工作区结构即可直接套用。添加包到 Monorepo 工作区pnpm add package -w # 在工作区中添加包-w--workspace-root表示将依赖添加到工作区根目录的package.json。运行脚本# 在所有包中运行脚本 pnpm -r run script # 仅在某个包中运行脚本 pnpm --filter package run script # 在某个包及其依赖中运行脚本 pnpm --filter package... run script-r--recursive会按拓扑序在所有工作区包中执行脚本--filter package将执行范围限定到单个包--filter package...末尾的三个点表示该包及其所有依赖常用于先构建底层依赖再构建上层包的场景。添加工作区范围的依赖# 添加依赖到工作区根目录 pnpm add package -w # 添加开发依赖到工作区根目录 pnpm add -D package -w创建新的包在packages目录中创建新的包例如mkdir packages/new-package cd packages/new-package pnpm init每个包拥有独立的package.json工作区成员之间通过 pnpm 的 workspace 协议自动识别为本地依赖无需手动发布即可相互引用。链接本地包# 将本地包链接到当前工作区 pnpm link local-package-path # 链接工作区中的包 pnpm add local-package-name --workspacepnpm add local-package-name --workspace是工作区中链接本地包的首选方式它会将本地包以符号链接形式纳入node_modules并且本地代码变更即时生效无需重新安装。高级用法工作区# 创建工作区 pnpm init -w # 在工作区中添加包 pnpm add package -w链接# 链接一个全局包到当前项目 pnpm link package # 链接本地包到全局 pnpm link --global packagepnpm link package将已全局安装的包链接到当前项目pnpm link --global package则相反把当前项目链接为全局包——这是本地开发 CLI 工具、验证发布前行为的常用手段。运行脚本# 运行 package.json 中的脚本 pnpm run script # 运行根目录中的包的脚本 pnpm run -w scriptpnpm run script执行当前目录package.json中scripts字段定义的脚本pnpm run -w script明确指定在工作区根目录执行。reference 项目自身的构建流程即是这样组织的——package.json 中的build脚本为refs-cli npm run cpy将docs/*.md备忘清单编译为dist静态站点start脚本则进入监听模式实时预览这正是在项目根目录运行pnpm run build这一命令的典型落地场景。总结pnpm 以内容寻址存储、符号链接式node_modules和原生工作区支持在安装速度、磁盘占用与 Monorepo 工程化三个方面显著优于传统方案。从 npm 命令对照 迁移入手掌握add/remove/update/list/why/cache等日常命令再借助pnpm-workspace.yaml与--filter、-r等标志组织多包仓库即可在单项目与 Monorepo 两种形态间无缝切换。相关速查内容可在 pnpm 备忘清单 中随时查阅也可继续参考 npm 备忘清单 与 package.json 备忘清单 补全包管理知识拼图。【免费下载链接】reference面向开发者的技术速查清单Cheat Sheets集合整理常见技术、工具与开发流程帮助快速查阅关键信息提高开发效率。项目地址: https://gitcode.com/GitHub_Trending/referen/reference创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考