什么是Node模块中的同行依赖关系?

105 阅读1分钟

对package.json文件中peerDependencies字段的简单解释

在一些package.json文件中,你可能会看到这样的几行。

{
  //...
  "peerDependencies": {
    "libraryName": "1.x"
  }
}

你可能已经看到了dependenciesdevDependencies ,但没有看到peerDependencies

dependencies 是你的项目所依赖的包。

devDependencies 是在开发阶段需要的包。比如像Jest这样的测试框架,或者像BabelESLint这样的其他工具。

在这两种情况下,当你安装一个包时,它的依赖项和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 或其他版本。这一切都遵循语义上的版本划分