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/(含 onlyBuiltDependenciesFile、patchedDependencies、根目录 .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.json的pnpm.patchedDependencies覆盖 workspace。pnpm config get patchedDependencies在冲突场景下可能与 lockfile 不一致,排查请以 lockfile / 磁盘为准。- 多个
pnpmfile/updateConfig:updateConfig按加载顺序链式执行,后执行的覆盖先执行的;要可控建议单入口.pnpmfile.cjs再require配置包。
.pnpmfile.cjs
pnpmfile 与锁文件同目录;workspace 放在锁文件所在 monorepo 根。
常用钩子:readPackage、updateConfig(pnpm ≥ 10.8)、afterAllResolved、beforePacking 等(按需选用)。
与配置包配合:配置包先解压,根目录 .pnpmfile.cjs 可惰性 require('node_modules/.pnpm-config/<包名>/...'),避免尚未安装配置包时子命令(如某些目录下的 pnpm pack)顶层 require 直接报错。本仓库示例:pnpm-config-dep-verify/.pnpmfile.cjs。
别名(Aliases)
别名:pnpm add <别名>@npm:<真实包>@<版本>。可与 readPackage 结合,在钩子里把依赖字段批量改成 npm:... 形式。