問題
在開發npm插件的時候, 例如element-ui
首先element-ui基於vue, 所以它希望使用element-ui的項目, 本身擁有Vue模塊
所以peerDependencies 主要用於npm插件告訴使用者, npm插件本身依賴哪些模塊, 並且需要安裝它
業界使用這個屬性的情況
ant-design
"peerDependencies": { "react": ">=16.0.0", "react-dom": ">=16.0.0" }
這個表明使用ant-design 中的react建議大於等於16.0.0版本
element-ui
"peerDependencies": { "vue": "^2.5.17" },
不滿足條件時的警告
peerDependencies 在npm3及其之后的版本起到的作用只是提示作用
warning " > vue-loader@15.8.3" has unmet peer dependency "css-loader@*". warning "@nuxtjs/eslint-module > eslint-loader@3.0.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0". warning "@nuxtjs/eslint-config > eslint-plugin-vue > vue-eslint-parser@5.0.0" has incorrect peer dependency "eslint@^5.0.0".
>表示哪個項目中引入的插件
例如第一行就表名是根項目本身引用的vue-loader插件中要求根項目有安裝css-loader
但跟項目沒有安裝css-loader, 所以就會有這個問題
has unmet peer dependency表示peerDependency聲明的依賴沒安裝
has incorrect peer dependency 表示peerDependency聲明的依賴安裝了 但是版本沒對上
疑問
若使用npm模塊時, 項目本身不滿足npm模塊peerDependencies 會發生什么?
其實只會給一句警告
例如
npm插件依賴的模塊為什么不直接寫在Dependencies中?
例如element-ui為什么不把vue模塊 寫在dependencies中,
這樣無論如何使用element-ui都會有vue模塊
但是這樣安裝的vue是在這個element-ui中的node_modules中
my-project
| - node_modules | - vue | - element-ui | - node_modules | - vue
這樣打包出來就會包含兩個vue模塊
有peer denpendency warning的時候一定要處理嗎?
不一定, 其實這也是peerDenpendency非常雞肋的地方, 因為有可能項目是滿足要求的, 但是還是會warning
為什么
例如 這個warming
warning "@nuxtjs/eslint-module > eslint-loader@3.0.3" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
eslint-loader聲明要裝webpack, 但是webpack在nuxt這個包里, 所以就檢查不到項目其實有裝webpack了
但實際依賴是滿足要求的, 但是也會報warming
