研发协作
用 pnpm 做 Node.js…
在 Node.js 项目或 monorepo 中使用 pnpm 10.x/11 管理依赖、配置工作区、统一版本、打补丁、控制供应链安全并配置 CI 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
用 pnpm 做 Node.js 依赖管特定
解决思路
- 使用 pnpm 的内容寻址存储(content-addressable store)去重机器上所有项目的包,并默认启用严格依赖解析来避免 phantom dependencies。
- 把 pnpm 设置放在 pnpm-workspace.yaml(全局放 config.yaml),使用 camelCase 键;.npmrc 只用于认证/registry 凭据;不要依赖 package.json 的 pnpm 字段(已不再读取)。
- 在 pnpm 项目中先检查 pnpm-workspace.yaml 获取设置和工作区结构;检查 .npmrc 只看认证配置。
- CI 中始终使用 pnpm install --frozen-lockfile 或 pnpm ci。
- 用 pnpm install、pnpm add、pnpm remove、pnpm update 管理依赖;用 pnpm run 运行脚本;用 pnpm dlx/pnx 临时执行;用 pnpm workspace 管理工作区;用 pnpm runtime 管理运行时;发布相关用 pnpm version、pnpm view、pnpm sbom、pnpm stage。
- 配置 pnpm-workspace.yaml(camelCase 键)、全局 config.yaml、packageConfigs 和 .npmrc 认证。
- 在 monorepo 中使用工作区:通过 filtering 过滤包、用 workspace 协议引用本地包、共享 lockfile、用 packageConfigs 管理包配置。
- 管理存储:使用内容寻址存储、virtual store、node linker 模式,以及 frozen/read-only store。
- 用 Catalogs 集中依赖版本:设置 catalogMode,在 overrides 中使用 catalog: 引用 catalog 版本。
- 用 Overrides 强制版本,包括传递依赖和 peer 依赖;用 packageExtensions 扩展包元数据。
- 用 Patches 修改第三方包:在 pnpm-workspace.yaml 的 patchedDependencies 中声明补丁。
- 用 Aliases 以自定义名称安装包:使用 npm: 别名,或通过 namedRegistries 配置 registry 别名。
- 用 .pnpmfile.mjs hooks:readPackage、updateConfig、beforePacking;可配置 finders、resolvers/fetchers。
- 管理 peer dependencies:使用自动安装、strict mode、rules、dedupePeers,并运行 peers check。
- 用 configDependencies 跨仓库共享 hooks、设置、catalogs、patches。
- 用 Global Virtual Store:共享 node_modules,适用于 git-worktree 多 agent 环境;也可使用隔离的全局包。
- 供应链安全:用 allowBuilds 做构建审批,设置 minimumReleaseAge,使用 trustPolicy,并校验 lockfile integrity。
- CI/CD 设置:覆盖 GitHub Actions、GitLab、Docker;使用 pnpm ci、缓存 store、frozen lockfiles。
- 迁移:从 npm/Yarn 迁移到 pnpm,处理 phantom deps;从 pnpm v10 迁移到 v11 时更新配置拆分等变更。
- 性能:优化 install,配置 allowBuilds,启用 global virtual store,并行化工作区任务。
- 针对 pnpm v11 行为变化,按当前文档处理配置拆分、隔离的全局包、allowBuilds、pmOnFail、global virtual store。
适用边界 · 注意事项
- 项目不使用 pnpm、或无法采用 pnpm 的工作区/存储模型时,本经验不适用。
- 仍依赖 package.json 的 pnpm 字段,或把非认证设置写在 .npmrc 中时,需先迁移到 pnpm-workspace.yaml/config.yaml,否则不适用。
- 不能接受严格依赖解析、且存在必须依赖 phantom dependencies 的历史项目时,不适用。