Skip to content
目录

1. pnpm

配置依赖(configDependencies)

是什么:在 pnpm-workspace.yaml 里声明、带精确版本与 integrity 的包;会在所有常规依赖之前安装到 node_modules/.pnpm-config/<包名>/,用来集中放白名单 JSON、补丁文件、给钩子 require 的脚本等。官方:配置依赖项

不是什么:只声明 configDependencies 不会自动生效 onlyBuiltDependenciesFile / patchedDependencies——文件会落盘,但你要在 workspace(或通过钩子)显式写出路径才会被 pnpm 使用。例外命名:pnpm-plugin-* / @scope/pnpm-plugin-*自动加载该包根目录的 pnpmfile.cjs(仍是钩子机制,不是自动扫包内所有补丁/白名单)。

限制:配置包不能有自有依赖、不能声明 preinstall/postinstall 等生命周期脚本。

本地可跑示例pnpm-config-dep-verify/(含 onlyBuiltDependenciesFilepatchedDependencies、根目录 .pnpmfile.cjs 转发配置包内 pnpm-hooks.cjs;细节见同目录 notes.txt)。

重复配置时谁生效(pnpm 10.33 实测)

  • onlyBuiltDependencies 数组 + onlyBuiltDependenciesFile:源码语义为合并——先取内联数组,再把 JSON 文件里的名单 push 进去(并集),不是二选一覆盖。
  • 同一 pnpm-workspace.yaml 里重复键(例如两行同名 patchedDependencies):YAML 解析后后者覆盖前者
  • patchedDependencies 同键、workspace 与根 package.json 路径冲突:以 pnpm-lock.yaml 与实际 node_modules 为准时,package.jsonpnpm.patchedDependencies 覆盖 workspacepnpm config get patchedDependencies 在冲突场景下可能与 lockfile 不一致,排查请以 lockfile / 磁盘为准。
  • 多个 pnpmfile / updateConfigupdateConfig 按加载顺序链式执行,后执行的覆盖先执行的;要可控建议单入口 .pnpmfile.cjsrequire 配置包。

.pnpmfile.cjs

pnpmfile 与锁文件同目录;workspace 放在锁文件所在 monorepo 根

常用钩子:readPackageupdateConfig(pnpm ≥ 10.8)、afterAllResolvedbeforePacking 等(按需选用)。

与配置包配合:配置包先解压,根目录 .pnpmfile.cjs 可惰性 require('node_modules/.pnpm-config/<包名>/...'),避免尚未安装配置包时子命令(如某些目录下的 pnpm pack)顶层 require 直接报错。本仓库示例:pnpm-config-dep-verify/.pnpmfile.cjs

别名(Aliases)

别名pnpm add <别名>@npm:<真实包>@<版本>。可与 readPackage 结合,在钩子里把依赖字段批量改成 npm:... 形式。

MIT License.