配置依赖项
配置依赖项允许你在多个项目之间共享和集中配置文件、设置和钩子。 它们在所有常规依赖项(“dependencies”、“devDependencies”、“optionalDependencies”)之前安装,使其成为设置自定义钩子、补丁和目录条目的理想选择。
配置依赖项可帮助你将所有挂钩、设置、补丁、覆盖、目录、规则保存在一个地方,并在多个存储库中使用它们。
如果你的配置依赖项按照 pnpm-plugin-* 或 @*/pnpm-plugin-* 模式命名,pnpm 将自动从其根目录加载 pnpmfile.cjs。
如何添加配置依赖项
配置依赖关系定义在你的 pnpm-workspace.yaml 中,必须使用精确的版本和完整性校验和来安装。
例如,运行 pnpm add --configmy-configs 会将此条目添加到你的 pnpm-workspace.yaml:
pnpm-workspace.yaml
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
重要:
- 配置依赖项不能有自己的依赖项。
- 配置依赖项不能定义生命周期脚本 (例如
preinstall,postinstall等)。
使用方法
加载一个允许构建的依赖列表
你可以使用 onlyBuiltDependenciesFile 设置加载允许构建的包名称列表。
配置依赖项内的示例 allow.json 文件:
allow.json
[
"@airbnb/node-memwatch",
"@apollo/protobufjs",
...
]
你的工作区配置:
pnpm-workspace.yaml
configDependencies:
'@myorg/trusted-deps': 0.1.0+sha512-IERT0uXPBnSZGsCmoSuPzYNWhXWWnKkuc9q78KzLdmDWJhnrmvc7N4qaHJmaNKIusdCH2riO3iE34Osohj6n8w==
onlyBuiltDependenciesFile: node_modules/.pnpm-config/@myorg/trusted-deps/allow.json
安装钩子中使用的依赖项
配置依赖项在加载 .pnpmfile.cjs 中的钩子之前安装,允许你从配置包导入逻辑。
示例:
.pnpmfile.cjs
const { readPackage } = require('.pnpm-config/my-hooks')
module.exports = {
hooks: {
readPackage
}
}
动态更新 pnpm 设置
使用 updateConfig 钩子,你可以使用配置依赖项动态更新 pnpm 的设置。
例如,以下 pnpmfile 向 pnpm 的配置中添加了一个新的 catalog 条目:
@myorg/pnpm-plugin-my-catalogs/pnpmfile.cjs
module.exports = {
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+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"