跳到主内容
版本:Next

配置依赖项

配置依赖项允许你在多个项目之间共享和集中配置文件、设置和钩子。 它们在所有常规依赖项(“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

pnpm-workspace.yaml
configDependencies:
my-configs: "1.0.0"

重要:

  • 配置依赖项不能有自己的依赖项。
  • 配置依赖项不能定义生命周期脚本 (例如 preinstall, postinstall 等)。

使用方法

安装钩子中使用的依赖项

配置依赖项在加载 .pnpmfile.mjs 中的钩子之前安装,允许你从配置包导入逻辑。

示例:

.pnpmfile.mjs
import { readPackage } from '.pnpm-config/my-hooks'

export const hooks = {
readPackage
}

动态更新 pnpm 设置

使用 updateConfig 钩子,你可以使用配置依赖项动态更新 pnpm 的设置。

例如,以下 pnpmfile 向 pnpm 的配置中添加了一个新的 catalog 条目:

@myorg/pnpm-plugin-my-catalogs/pnpmfile.mjs
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][补丁文件]。

示例:

pnpm-workspace.yaml
configDependencies:
my-patches: "1.0.0"
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"