原文: 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 關注公衆號
轉載請註明出處