peerDependencies对等依赖
peerDependencies用于声明包期望宿主环境提供的依赖,安装时不会自动下载,而是要求宿主项目自行安装匹配版本。
peerDependencies对等依赖
基本语法
JSON
{
"name": "my-ui-lib",
"peerDependencies": {
"react": ">=17.0.0",
"vue": "^3.0.0"
}
}
核心行为
- npm v7+:未安装peer依赖会自动安装,版本冲突会报错
- npm v3-v6:仅发出警告,不自动安装
- yarn v1:仅警告;yarn v2+:默认自动安装
典型使用场景
- 插件模式:UI组件库依赖宿主提供的React
- 构建工具插件:ESLint插件依赖宿主的ESLint
- 框架生态:Vuex依赖宿主的Vue
JSON
{
"name": "eslint-plugin-react",
"peerDependencies": {
"eslint": "^8.0.0"
}
}
peerDependenciesMeta可选标记
JSON
{
"peerDependencies": {
"webpack": "^5.0.0",
"vite": "^4.0.0"
},
"peerDependenciesMeta": {
"webpack": { "optional": true },
"vite": { "optional": true }
}
}
optional为true时,宿主未安装该peer依赖不会报错,适用于支持多种构建工具的库。
与dependencies的区别
| 类型 | 是否自动安装 | 适用场景 |
|---|---|---|
| dependencies | 是 | 包自身运行所需 |
| peerDependencies | 否(npm7+可能自动) | 宿主应提供的共享依赖 |
peerDependencies不要滥用。仅当包需要与宿主共享同一实例时才使用,否则用dependencies。
要点总结
- peerDependencies声明宿主应提供的依赖,避免重复实例
- npm v7+会自动安装peer依赖,版本冲突会报错
- peerDependenciesMeta.optional标记可选peer依赖
- 插件、组件库、框架生态是典型使用场景
- 非共享依赖场景应使用dependencies而非peerDependencies