对package.json文件中peerDependencies字段的简单解释
在一些package.json文件中,你可能会看到这样的几行。
{
//...
"peerDependencies": {
"libraryName": "1.x"
}
}
你可能已经看到了dependencies 和devDependencies ,但没有看到peerDependencies 。
dependencies 是你的项目所依赖的包。
devDependencies 是在开发阶段需要的包。比如像Jest这样的测试框架,或者像Babel或ESLint这样的其他工具。
在这两种情况下,当你安装一个包时,它的依赖项和devDependencies会被npm自动安装。
peerDependencies 而devDependencies则不同。它们不是自动安装的。
当一个依赖被列在软件包中的peerDependency时,它不会被自动安装。相反,包含该包的代码必须把它作为其依赖关系。
npm 如果你运行 ,而它没有找到这个依赖关系,则会警告你。npm install
例子:假设软件包a 包括依赖项b 。
a/package.json
{
//...
"dependencies": {
"b": "1.x"
}
}
包b 反过来希望包c 作为一个对等的依赖。
b/package.json
{
//...
"peerDependencies": {
"c": "1.x"
}
}
因此,在包A中,我们必须将c 作为一个依赖项,否则当你安装包b ,npm会给你一个警告(而且代码很可能在运行时失败)。
a/package.json
{
//...
"dependencies": {
"b": "1.x",
"c": "1.x"
}
}
版本必须是兼容的,所以如果一个peerDependency被列为2.x ,你就不能安装1.x 或其他版本。这一切都遵循语义上的版本划分。