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
還是不怎么了解, 暫且寫下本文記錄着先, 有錯請指出!