npm中peerDependencies的作用
peerDependencies 一般是給插件使用的, 它的作用有以下幾點:
- 要求項目擁有peerDependencies所指定的環境依賴, 完成子環境要求父環境具有某些依賴包
- 提升項目(插件)依賴
- 減少重復安裝依賴
例如: 我的項目叫 項目A , 其內部安裝了一個插件叫 插件B , 插件B 的package.json 如下:
// 插件B package.json
{
"peerDependencies": {
"vue": ">=2.6.4"
}
}
則需要我的 項目A 安裝有依賴 vue@2.6.4 , 即 項目A 的 package.json 或node_modules 要是這樣:
// 項目A package.json
{
"dependencies": {
"vue": "^2.6.4",
"插件B": "^1.0.0"
}
}
# 項目A 的目錄結構
+---項目A
|
|
+---node_modules
+---vue
| package.json
|
+---插件B
package.json
第一點解釋完成。
那疑問在於, 既然 插件B 需要 vue@>=2.6.4 , 為什么不將其放在 dependencies 中呢? 因為這樣的話整個 項目A 的文件結構將是這樣:
# 項目A 的目錄結構
+---項目A
|
|
+---node_modules
|
|
+---插件B
package.json
+---vue
package.json
這樣的意思是 插件B 的開發用到了 vue@>=2.6.4 , 而真正需要的意思是: 插件B 要在 vue@>=2.6.4 的環境中使用 , 那么第二點解釋完成
還有這樣情況, 項目A依賴了vue@2.6.5, 而插件B的開發需要用到vue@>=2.6.4, 此時項目A 的 package.json 或 node_modules 將是這樣:
// 項目A package.json
{
"dependencies": {
"vue": "^2.6.5",
"插件B": "^1.0.0"
}
}
// 插件B package.json
{
"dependencies": {
"vue": "^2.6.4",
}
}
# 項目A 的目錄結構
+---項目A
|
|
+---node_modules
+---vue
| package.json
|
+---插件B
package.json
+---vue
package.json
這樣的話 項目A 會重復安裝兩次不同版本的 vue , 但是可以發現: 插件B 對 vue 的依賴版本剛好在 項目A 的范圍內, 於是我們如果設置了 插件B 的 package.json 為這樣:
// 插件B package.json
{
"peerDependencies": {
"vue": ">=2.6.4",
}
}
那么 插件B 將不會安裝 vue 而是使用 項目A(父環境) 中的 vue , 從而減少重復安裝依賴的情況, 最后 項目A 與 插件B 的 package.json 或 node_modules 將是這樣:
// 項目A package.json
{
"dependencies": {
"vue": "^2.6.5",
"插件B": "^1.0.0"
}
}
// 插件B package.json
{
"peerDependencies": {
"vue": ">=2.6.4"
}
}
# 項目A 的目錄結構
+---項目A
|
|
+---node_modules
+---vue
| package.json
|
+---插件B
package.json
第三點解釋完成, 本文結束
到這其實對 peerDependencies 還是不怎么了解, 暫且寫下本文記錄着先, 有錯請指出!
