轻松掌握 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为一个包含requireimport以及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:指定项目支持的内容版本(nodejsnpm)。
  • 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_modulesnode_modules里的依赖包目录。配置默认值为true
  • hoistPattern:指定依赖包提升到node_modules/.pnpm/node_modules。配置值类型为字符串数组,默认为["*"]

场景案例

  • 基于pnpm构建单体仓库monorepo模式,请访问https://www.cnblogs.com/chenfengbukeyimi/articles/18961183



文章收获

  • 如果觉得对你有所帮助,请点下“推荐”吧!
  • 如果担心文忘记章地址,请点下“收藏”吧!
  • 如果对博主文章内容喜欢,可进行“关注”博主,更好地获悉最新文章内容。
posted @ 2025-06-09 11:13  晨风不可依米  阅读(372)  评论(0)    收藏  举报