关于 pnpm
pnpm 是面向 JavaScript 项目的包管理器技能,涵盖命令、配置、工作区和常见运维实践。它强调内容寻址存储、依赖隔离及 monorepo 管理。
主要功能
- 01安装与 CLI 命令参考
- 02工作区与依赖筛选
- 03内容寻址存储与缓存
- 04配置、补丁与依赖覆盖
- 05CI、Docker 与生产部署指南
适用场景
- 01管理 monorepo 中的依赖和脚本
- 02在 CI 中执行锁文件固定安装
- 03排查依赖解析和安装错误
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ hairyf/ skills --skill pnpm安装后在 Claude Code 中输入/pnpm确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
GENERATION.mdreferences/advanced-limitations.mdbest-practices-ci.mdbest-practices-docker.mdbest-practices-git.mdbest-practices-migration.mdbest-practices-only-allow-pnpm.mdbest-practices-performance.mdbest-practices-podman.mdbest-practices-production.mdbest-practices-typescript.mdcore-cli.mdcore-config.mdcore-errors.mdcore-installation.mdcore-limitations.mdcore-package-sources.mdcore-store.mdcore-typescript.mdcore-workspaces.mdfeatures-aliases.mdfeatures-cache.mdfeatures-catalogs.mdfeatures-changesets.mdfeatures-completion.mdfeatures-config-dependencies.mdfeatures-env.mdfeatures-filtering.mdfeatures-finders.mdfeatures-git-branch-lockfiles.md详细介绍
pnpm 是一款速度快、磁盘空间利用率高的包管理器。它使用内容寻址存储,在一台机器上的所有项目之间去重软件包,从而显著节省磁盘空间。pnpm 默认强制严格解析依赖,防止出现幻影依赖。对于 pnpm 特定设置,最好将配置放在 pnpm-workspace.yaml 中。
重要提示: 使用 pnpm 项目时,Agent 应检查 pnpm-workspace.yaml 和 .npmrc 文件,以了解工作区结构和配置。在 CI 环境中始终使用 --frozen-lockfile。
此技能基于 pnpm 10.x,于 2026-02-01 生成。
核心
| 主题 | 描述 | 参考 |
|---|---|---|
| 安装 | 独立脚本、Corepack、npm、系统包管理器 | core-installation |
| CLI 命令 | 安装、添加、移除、更新、运行、执行、dlx 和工作区命令 | core-cli |
| 配置 | pnpm-workspace.yaml、.npmrc 设置和 package.json 字段 | core-config |
| 工作区 | 支持单体仓库,具备筛选、工作区协议和共享锁文件功能 | core-workspaces |
| 存储 | 内容寻址存储、硬链接和磁盘空间效率 | core-store |
| 软件包来源 | npm、JSR、工作区、Git、tarball——可信和特殊来源 | core-package-sources |
| 错误 | 常见错误代码及解决方法 | core-errors |
功能
| 主题 | 描述 | 参考 |
|---|---|---|
| 筛选 | 用于 --filter 的丰富选择器语法(依赖项、依赖方、变更项、glob) | features-filtering |
| 目录 | 集中管理工作区依赖版本 | features-catalogs |
| 覆盖 | 强制指定依赖项的版本,包括传递依赖 | features-overrides |
| 补丁 | 使用自定义修复修改第三方软件包 | features-patches |
| 别名 | 使用 npm: 协议以自定义名称安装软件包 | features-aliases |
| 钩子 | 使用 .pnpmfile.cjs 钩子自定义解析 | features-hooks |
| 对等依赖 | 自动安装、严格模式和依赖规则 | features-peer-deps |
| 配置依赖 | 在项目间共享钩子、目录和补丁 | features-config-dependencies |
| Git 分支锁文件 | 使用分支专属锁文件避免合并冲突 | features-git-branch-lockfiles |
| Changesets | 单体仓库版本管理和发布 | features-changesets |
| 供应链安全 | allowBuilds、blockExoticSubdeps、trustPolicy | features-supply-chain-security |
| 查找器 | 按软件包属性搜索依赖关系图(v10.16+) | features-finders |
| 补全 | Shell Tab 补全(Bash、Zsh、Fish) | features-completion |
| 脚本 | 生命周期脚本和 pnpm:devPreinstall | features-scripts |
| 缓存 | 元数据缓存命令(list、view、delete) | features-cache |
| Node.js 环境 | 管理 Node.js 版本(pnpm env use/add/remove) | features-env |
| 发布与部署 | 用于 Docker 和注册表的 publish、pack、deploy、fetch | features-publish-deploy |
最佳实践
| 主题 | 描述 | 参考 |
|---|---|---|
| CI/CD 设置 | GitHub Actions、GitLab CI、Docker 和缓存策略 | best-practices-ci |
| Docker | BuildKit 缓存、pnpm fetch、用于 monorepo 的 pnpm deploy | best-practices-docker |
| 生产环境 | 锁文件部署、离线安装 | best-practices-production |
| 仅允许 pnpm | 使用 preinstall(only-allow)强制使用 pnpm | best-practices-only-allow-pnpm |
| TypeScript | preserveSymlinks、packageExtensions、@pnpm/plugin-types-fixer | best-practices-typescript |
| Podman | Btrfs reflinks、store 和 node_modules 卷挂载 | best-practices-podman |
| Git | 锁文件提交和合并冲突解决 | best-practices-git |
| 迁移 | 从 npm/Yarn 迁移、处理幻影依赖、monorepo 迁移 | best-practices-migration |
| 性能 | 安装优化、store 缓存、工作区并行化 | best-practices-performance |
高级
| 主题 | 描述 | 参考 |
|---|---|---|
| 限制 | 忽略 npm 锁文件,binstubs 是 shell 脚本 | advanced-limitations |
评论
支持 Markdown