細說 peerDependencies


 

問題

在開發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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM