使用 npm 安裝第三方包,有時會出現一大堆 WARN
。vue
如今無論什麼框架,vue
、umi
、webpack
、babel
、eslint
都講究插件化開發,對普通開發人員提供插件書寫接口方便自行擴展。想法是好的,可是存在一些問題。node
eslint-config-react-app@2.1.0
是 eslint
的一個插件,寫這個插件的時候 eslint 版本爲 4.1.1。eslint 自己須要不斷優化升級,版本更迭過程當中會不停的新增 api、廢棄 api。也就是說,eslint-config-react-app@2.1.0
確定適用 eslint@4.1.1
,但不必定適用 eslint@6.x
(6.x 中可能會廢棄相關api)。普通用戶並不知道這一點,傻乎乎的下載最新的 eslint
和 eslint-config-react-app
最新包,結果沒法正常運行。react
Npm 爲了解決上面的問題,在 npm@1.2.10
以後提供了 peerDependencies
屬性,具體使用以下,插件包 eslint-config-react-app
的 package.json 中添加該屬性。webpack
{ // .... "peerDependencies": { "eslint": "^4.1.1" } }
此時安裝插件包 eslint-config-react-app
,npm 會檢測 node_modules 目錄下有沒有 eslint@4.x
的包,若是沒有 npm 就會報警告⚠️ WARN,這樣能夠提示用戶這裏可能會有問題哦~不像以前運行報錯而用戶卻徹底無感。(在 npm@5.x
以前會直接報錯 ERR,5.x 以後版本改成報警告)git
peerDependencies
的出現必定程度上緩解了插件包依賴問題,但 未完全解決問題。舉例:eslint 版本的升級並不必定會大改 api,插件包eslint-config-react-app
在 eslint6.x
也能正常運行,因爲插件做者將 peerDependencies 寫的太死(4.x),就會出現問題。你沒法期望每一個插件做者能夠隨時跟蹤 eslint 主版本的變動,將包依賴問題丟給 人
來作在 dk 看來是最不靠譜的事。github
webpack 相關插件都由官方維護,安裝過程發現沒有出現一行 WARN,非常清爽,那種各類引包造輪子的框架是沒法避免這種隱患的。web