配置依赖项
配置依赖项允许你在多个项目之间共享和集中配置文件、设置和钩子。 它们在所有常规依赖项(“dependencies”、“devDependencies”、“optionalDependencies”)之前安装,使其成为设置自定义钩子、补丁和目录条目的理想选择。
配置依赖项可帮助你将所有挂钩、设置、补丁、覆盖、目录、规则保存在一个地方,并在多个存储库中使用它们。
If your config dependency is named following the pnpm-plugin-*, @*/pnpm-plugin-*, or @pnpm/plugin-* pattern, pnpm will automatically load its pnpmfile.mjs (falling back to pnpmfile.cjs) from the package root.
如何添加配置依赖项
Config dependencies are defined in your pnpm-workspace.yaml. Their integrity checksums are stored in pnpm-lock.yaml (in a dedicated env lockfile document).
例如,运行 pnpm add --configmy-configs 会将此条目添加到你的 pnpm-workspace.yaml:
configDependencies:
my-configs: "1.0.0"
重要:
- 配置依赖项不能有自己的依赖项。
- 配置依赖项不能定义生命周期脚本 (例如
preinstall,postinstall等)。
使用方法
安装钩子中使用的依赖项
配置依赖项在加载 .pnpmfile.mjs 中的钩子之前安装,允许你从配置包导入逻辑。
示例:
import { readPackage } from '.pnpm-config/my-hooks'
export const hooks = {
readPackage
}
动态更新 pnpm 设置
使用 updateConfig 钩子,你可以使用配置依赖项动态更新 pnpm 的设置。
例如,以下 pnpmfile 向 pnpm 的配置中添加了一个新的 catalog 条目:
export const hooks = {
updateConfig (config) {
config.catalogs.default ??= {}
config.catalogs.default['is-odd'] = '1.0.0'
return config
}
}
如果将其作为配置依赖项安装:
pnpm add --config @myorg/pnpm-plugin-my-catalogs
那么你可以运行:
pnpm add is-odd@catalog:
这将安装 is-odd@1.0.0 并将以下内容添加到你的 package.json 中:
{
"dependencies": {
"is-odd": "catalog:"
}
}
这使得跨项目维护和共享集中配置和依赖项版本变得容易。
加载补丁文件
您可以引用存储在配置依赖项中的 [patch files][补丁文件]。
示例:
configDependencies:
my-patches: "1.0.0"
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"