轻松掌握 pnpm 包管理器
文/晨风不可依米 (2025.06.07)
使用 pnpm 的必要性
- 基于硬链接(
资源引用)和符号链接(快捷方式)共享依赖,严格隔离依赖层级,避免幽灵依赖。 - 由于采用硬链接方式,因此在安装上直接复用,在存储上减少磁盘空间占用。
- 通过内容寻址存储(
CAS)验证包完整性,依赖包使用上的安全性有保障。 - 对
monorepo架构模式的支持非常友好。 - 在使用上,与
npm命令相差不大;可以快速上手。
特别提醒:通过npm执行命令npm install -g pnpm全局安装pnpm。
掌握包管理器 pnpm
基础概念
安装位置
全局位置(--global):全局安装位置可通过执行pnpm root -g命令查看。
项目位置(项目根目录下安装):安装的实际文件在node_modules/.pnpm/node_modules目录下。
项目依赖
生产依赖包(--save-prod):常用于项目必备依赖;依赖包类型可省略或简写为-P。
开发依赖包(--save-dev):常用于项目构建、测试等场景;依赖包类型可简写为-D。
外部依赖包(--save-peer):常用于项目插件、库模式等场景;不可省略。
本地模块包(--workspace):仅用于workspace多包管理场景(需配置 pnpm-workspace.yaml 文件);不可省略。
基础命令
特别提醒:请选用合适的安装类型和依赖包类型进行安装。
pnpm init:初始化包管理器配置。pnpm doctor:检查包管理器配置问题。pnpm list:查看项目依赖包列表。pnpm view <repository> versions:查看项目依赖包可用版本。pnpm install <repository>:安装项目依赖包。pnpm remove <repository>:移除项目依赖包。pnpm update <repository>:更新项目依赖包。pnpm run:执行脚本命令。pnpm create:创建脚手架项目。pnpm audit:检查并校验依赖包的安全性;可尝试命令pnpm audit --fix修复问题,通过配置overides强制使用其它安全版本依赖包。pnpm publish:发行模块包到npm仓库。
包管理器配置(package.json)
仓库基本信息配置
name: 仓库包名。version:仓库版本号。license:版权许可证类型。description:仓库包功能描述。bugs: 指定可提交有关仓库问题的地址。homepage:仓库包主页地址(README.md)。author:仓库所有者(昵称 | 邮箱)。
模块系统的入口配置
特别提醒:模块系统的入口,是打包后导出给第三方使用的模块入口。
main:指定CommonJS模块系统的入口。module:指定ESModule模块系统的入口。types | typings:指定仓库模块系统的类型声明资源入口。exports:灵活增强定义模块系统的入口;key为别名。value为一个包含require、import以及types等字段的对象。bin:可执行文件路径;常用于给用户系统提供全局命令的功能。
仓库发行配置
private:是否允许发行到仓库注册源(npmjs)。repository:仓库源地址信息。files:发行到仓库注册源时要上传的资源内容;默认为打包后目录。publishConfig: 发行配置信息(一般不配置),详细配置如下:bin:参见模块系统的入口配置的bin字段配置。main:参见模块系统的入口配置的main字段配置。module:参见模块系统的入口配置的module字段配置。browser:指定浏览器环境下的入口文件。umd:main:参见模块系统的入口配置的main字段配置;(个人理解:指定整体包的入口文件)。types | typings:参见模块系统的入口配置的types | typings字段配置。exports:参见模块系统的入口配置的exports字段配置。os:参见其它信息配置的os字段配置。cpu:参见其它信息配置的cpu字段配置。es2015:支持es2015模块系统时,可指定模块系统的入口配置或加载特定文件内容。esnext:支持esnest(最新标准)模块系统时,可指定模块系统的入口配置或加载特定文件内容。unpkg:支持使用CDN加载模块系统的入口配置或特定文件内容。typesVersions:指定不同typescript版本,加载不同的类型声明文件资源;key值为TS版本号,value为类型声明文件资源地址。
构建打包配置
dependencies:仓库生产依赖。devDependencies:仓库开发依赖。peerDependencies:仓库外部依赖。packageManager:包管理器类型及版本。scripts: 仓库脚本命令;包含代码格式化、项目构建、打包、测试等场景脚本命令定义。
其它信息配置
os:指定仓库包支持的操作系统。cpu:指定仓库包支持的CPU架构。engines:指定项目支持的内容版本(nodejs、npm)。workspaces:用于支持工作区monorepo的配置。
工作区配置(pnpm-workspace.yaml)
基础信息配置
extends:指定可继承的工作区配置文件路径。packages:定义单体仓库下的所有包的路径;可用正则式匹配或排除。
nodejs相关配置
node-mirror:指定下载node的镜像源地址。nodeVersion:指定单体仓库包的node版本号,版本号无前缀v;需配合包管理器配置的字段engines联合使用。useNodeVersion:指定单体仓库包所使用的node版本号,版本号无前缀v;将会在执行pnpm run命令中使用该配置。
依赖项提升配置
hoist:将所有依赖项提升到(相关依赖实际存储位置)node_modules/.pnpm/node_modules,使得所有包可以访问未列出的依赖;即monorepo架构模式下的模块包不安装且能使用单体仓库的依赖包(可理解为单体仓库集中管理共享依赖,模块包可直接使用)。配置默认值为true。hoistWorkspacePackages:通过文件链接机制,将工作区配置所定义的包(字段配置packages)符号连接到node_modules/.pnpm/node_modules或node_modules里的依赖包目录。配置默认值为true。hoistPattern:指定依赖包提升到node_modules/.pnpm/node_modules。配置值类型为字符串数组,默认为["*"]。
场景案例
- 基于
pnpm构建单体仓库monorepo模式,请访问https://www.cnblogs.com/chenfengbukeyimi/articles/18961183。
文章收获
- 如果觉得对你有所帮助,请点下“推荐”吧!
- 如果担心文忘记章地址,请点下“收藏”吧!
- 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。

浙公网安备 33010602011771号