原文: flaviocopes.com/npm-peer-de…前端
在某些 package.json 文件中,你可能见到过一些这样的配置行:npm
{
//...
"peerDependencies": {
"libraryName": "1.x"
}
}
复制代码
dependencies
及 devDependencies
常见,而 peerDependencies
并非。json
dependencies
是你的项目所依赖的包。框架
devDependencies
是开发阶段所须要的包。好比说像 Jest 这样的测试框架或 Babel、ESLint 等其余库。测试
在以上两种状况中,当你安装一个包时,其 dependencies 和 devDependencies 会被 npm 自动安装。spa
peerDependencies
则有所不一样,它们不会被自动安装。code
当一个依赖项 c 被列在某个包 b 的 peerDependency 中时,它就不会被自动安装。取而代之的是,包含了 b 包的代码库 a 则必须将对应的依赖项 c 包含为其依赖。cdn
若是运行 npm install
时找不到该依赖,npm
会做出警告,正如例子中所示:blog
a/package.json
ci
{
//...
"dependencies": {
"b": "1.x"
}
}
复制代码
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
或其余不兼容的版本。该规定遵循 flaviocopes.com/npm-semanti… 标准。
查看更多前端好文
请搜索 fewelife 关注公众号
转载请注明出处