目录
新增于:v9.5.0
"目录"是工作区功能,用于将依赖版本范围定义为可重用常量。在目录中定义的常量之后可以在package.json
文件中引用。
目录协议(catalog:
)
一旦在pnpm-workspace.yaml
中定义了目录,
pnpm-workspace.yaml
packages:
- packages/*
# 定义版本范围目录
catalog:
react: ^18.3.1
redux: ^5.0.1
可以使用catalog:
协议代替版本范围本身。
packages/example-app/package.json
{
"name": "@example/app",
"dependencies": {
"react": "catalog:",
"redux": "catalog:"
}
}
这相当于直接编写版本范围(例如^18.3.1
)。
packages/example-app/package.json
{
"name": "@example/app",
"dependencies": {
"react": "^18.3.1",
"redux": "^5.0.1"
}
}
您可以在package.json
的以下字段中使用catalog:
协议:
dependencies
devDependencies
peerDependencies
optionalDependencies
pnpm.overrides
catalog:
协议允许在冒号后使用可选名称(例如:catalog:name
)来指定应使用的目录。当省略名称时,使用默认目录。
根据不同的场景,与直接编写版本范围相比,catalog:
协议提供了一些优势,详细说明如下。
优势
在工作区(即单体仓库或多包仓库)中,多个包使用相同依赖的情况很常见。目录减少了编写package.json
文件时的重复,并为此提供了一些好处:
- 保持唯一版本 —— 在工作区中通常希望只有一个依赖版本。目录使维护更加容易。重复的依赖可能在运行时发生冲突并导致错误。使用打包器时,重复还会增加体积。
- 更轻松的升级 —— 当升级依赖时,只需编辑
pnpm-workspace.yaml
中的目录条目,而无需编辑所有使用该依赖的package.json
文件。这节省了时间——只需更改一行而不是多行。 - 更少的合并冲突 —— 由于升级依赖时不需要编辑
package.json
文件,因此这些文件中不再会发生Git合并冲突。