跳到主要内容
版本:Next

配置依赖项

配置依赖项允许你在多个项目之间共享和集中管理配置文件、设置和钩子。它们会在所有常规依赖项("dependencies"、"devDependencies"、"optionalDependencies")之前安装,这使得它们非常适合用于设置自定义钩子、补丁和目录条目。

配置依赖项帮助你将所有的钩子、设置、补丁、覆盖、目录和规则保存在一个地方,并在多个仓库中使用它们。

如何添加配置依赖项

配置依赖项在你的 pnpm-workspace.yaml 中定义,必须使用精确的版本号和完整性校验和进行安装。

示例:

pnpm-workspace.yaml
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="

重要:

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

用法

加载可构建依赖项的允许列表

你可以使用 onlyBuiltDependenciesFile 设置来加载允许构建的包名列表。

配置依赖项中的 allow.json 文件示例:

allow.json
[
"esbuild",
"fsevents"
]

你的工作空间配置:

pnpm-workspace.yaml
configDependencies:
my-configs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
onlyBuiltDependenciesFile: "node_modules/.pnpm-config/my-configs/allow.json"

安装钩子中使用的依赖项

配置依赖项会在 .pnpmfile.cjs 中的钩子加载之前安装,这使得你可以从配置包中导入逻辑。

示例:

.pnpmfile.cjs
const { readPackage } = require('.pnpm-config/my-hooks')

module.exports = {
hooks: {
readPackage
}
}

动态更新 pnpm 设置

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

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

my-catalogs/pnpmfile.cjs
module.exports = {
hooks: {
updateConfig (config) {
config.catalogs.default ??= {}
config.catalogs.default['is-odd'] = '1.0.0'
return config
}
}
}

安装并加载它:

pnpm-workspace.yaml
configDependencies:
my-catalogs: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
pnpmfile: "node_modules/.pnpm-config/my-catalogs/pnpmfile.cjs"

然后你可以运行:

pnpm add is-odd@catalog:

这将安装 is-odd@1.0.0 并在你的 package.json 中添加以下内容:

{
"dependencies": {
"is-odd": "catalog:"
}
}

这使得在项目间维护和共享集中式配置和依赖版本变得容易。

加载补丁文件

你可以引用存储在配置依赖项中的补丁文件

示例:

pnpm-workspace.yaml
configDependencies:
my-patches: "1.0.0+sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="
patchedDependencies:
react: "node_modules/.pnpm-config/my-patches/react.patch"