配置 (pnpm-workspace.yaml)
pnpm 从命令行、环境变量、pnpm-workspace.yaml
和 .npmrc
文件中获取其配置。
pnpm config
命令可用于读取和编辑项目和全局配置文件的内容。
相关的配置文件有:
- 每个项目的配置文件:
/path/to/my/project/pnpm-workspace.yaml
- 全局配置文件:
~/.config/pnpm/rc
(一个 INI 格式的key = value
参数列表)
授权相关的设置由 npm 的配置系统处理。因 此,pnpm config set registry=<value>
实际上会将设置保存到 npm 的全局配置文件中。
配置文件中的值可以使用 ${NAME}
语法包含环境变量。环境变量也可以指定默认值。使用 ${NAME-fallback}
会在 NAME
未设置时返回 fallback
。${NAME:-fallback}
会在 NAME
未设置或为空字符串时返回 fallback
。
依赖解析
overrides
此字段允许你指示 pnpm 覆盖依赖图中的任何依赖项。这对于强制所有包使用单一版本的依赖项、向后移植修复、用分支替换依赖项或删除未使用的依赖项非常有用。
注意,overrides 字段只能在项目的根目录设置。
overrides
字段的示例:
overrides:
"foo": "^1.0.0"
"quux": "npm:@myorg/quux@^1.0.0"
"bar@^2.1.0": "3.0.0"
"qar@1>zoo": "2"
你可以通过使用 ">" 分隔包选择器和依赖选择器来指定被覆盖的依赖项所属的包。
例如,qar@1>zoo
只会覆盖 qar@1
的 zoo
依赖项,而不会覆盖其他依赖项的 zoo
。
可以将覆盖定义为对直接依赖项规范的引用。
这可以通过在依赖项名称前添加 $
来实现:
{
"dependencies": {
"foo": "^1.0.0"
}
}
overrides:
foo: "$foo"
被引用的包不需要与被覆盖的包匹配:
overrides:
bar: "$foo"
如果你发现某个包的某个依赖项对你的使用来说是不必要的,你可以使用 -
来移除它。例如,如果包 foo@1.0.0
需要一个名为 bar
的大型包用于你不使用的功能,移除它可以减少安装时间:
overrides:
"foo@1.0.0>bar": "-"
这个功能对于 optionalDependencies
特别有用,因为大多数可选包都可以安全地跳过。
packageExtensions
packageExtensions
字段提供了一种方式来扩展现有包定义的附加信息。例如,如果 react-redux
应该在其 peerDependencies
中有 react-dom
但没有,可以使用 packageExtensions
来修补 react-redux
:
packageExtensions:
react-redux:
peerDependencies:
react-dom: "*"
packageExtensions
中的键是包名或包名和 semver 范围,所以可以只修补包的某些版本:
packageExtensions:
react-redux@1:
peerDependencies:
react-dom: "*"
可以使用 packageExtensions
扩展以下字段:dependencies
、optionalDependencies
、peerDependencies
和 peerDependenciesMeta
。
更大的示例:
packageExtensions:
express@1:
optionalDependencies:
typescript: "2"
fork-ts-checker-webpack-plugin:
dependencies:
"@babel/core": "1"
peerDependencies:
eslint: ">= 6"
peerDependenciesMeta:
eslint:
optional: true