簡體   English   中英

如何修復 npm UNMET PEER DEPENDENCY 警告?

[英]How do I fix the npm UNMET PEER DEPENDENCY warning?

我在 Windows 10 上,使用節點 5.6.0 和 npm 3.6.0。 我正在嘗試將 angular-material 和 mdi 安裝到我的工作文件夾中。 npm 安裝 angular-material mdi錯誤:

+-- angular@1.5.0

+-- UNMET PEER DEPENDENCY angular-animate@^1.5.0

+-- UNMET PEER DEPENDENCY angular-aria@^1.5.0

+-- angular-material@1.0.6

+-- UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57

npm WARN enoent ENOENT: no such file or directory, open
'C:\Users\xxxxx\Desktop\ngClassifieds\package.json' 

npm WARN angular-material@1.0.6 requires a peer of
angular-animate@^1.5.0 but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of angular-aria@^1.5.0
but none was installed. 

npm WARN angular-material@1.0.6 requires a peer of
angular-messages@^1.5.0 but none was installed.

如何解決此問題以安裝 AngularJS 材料和 MDI?

npm 不再安裝對等依賴項,因此您需要手動安裝它們,只需在所需的 deps 上執行npm install ,然后再次嘗試安裝主要的依賴項。


回復評論:

就在那個消息中,它說你錯過了哪個 deps

UNMET PEER DEPENDENCY angular-animate@^1.5.0 +-- 
UNMET PEER DEPENDENCY angular-aria@^1.5.0 +-- angular-material@1.0.6 +
UNMET PEER DEPENDENCY angular-messages@^1.5.0 `-- mdi@1.4.57` 

所以你需要npm install angular angular-animate angular-aria angular-material angular-messages mdi

package.json文件中指定的一個或多個模塊的依賴項UNMET PEER DEPENDENCY時,會拋出UNMET PEER DEPENDENCY錯誤。 仔細檢查警告並使用正確版本的依賴項更新package.json文件。

然后運行

rm -rf node_modules/
npm cache clean
npm install

這將正確安裝所有必需的依賴項。

就我而言,所有依賴項都已經存在。 在這種情況下,請更新NPM ,因為它可能已崩潰。 它解決了我的問題。

npm install -g npm

npm-install-peers為我工作。

npm install -g npm-install-peers

編輯 2020

從 npm v7.0.0 開始,npm 會自動安裝對等依賴項。 這是升級到 v7 的原因之一。

https://github.blog/2020-10-13-presenting-v7-0-0-of-the-npm-cli/

此頁面也很好地解釋了對等依賴的基本原理。 https://github.com/npm/rfcs/blob/latest/implemented/0025-install-peer-deps.md


此答案不適用於所有情況,但如果您無法通過簡單地輸入npm install來解決錯誤,則此步驟可能會有所幫助。

假設您遇到此錯誤。

UNMET PEER DEPENDENCY packageA@4.2.0

npm WARN packageB@3.3.0 requires a peer of packageA@^3.1.0 but none was installed.

這意味着您安裝了 packageA 的 4.2.0 版本,但 packageB@3.3.0 需要 pakageA 的 3.xx 版本。 ( ^的解釋)

所以你可以通過將 packageA 降級到 3.xx 來解決這個錯誤,但通常你不想降級包。
好消息是,在某些情況下,packageB 只是跟不上 packageA,而 packageB 的維護者正在努力將 packageA 的對等依賴提高到 4.xx
在這種情況下,您可以在 npm 或 github 中檢查是否有更高版本的 packageB 需要 packageA 的 4.2.0 版本。

例如,轉到發布頁面在此處輸入圖片說明

通常,您會發現像這樣的依賴關系發生了重大變化。

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

如果在發布頁面上沒有找到任何內容,請轉到問題頁面並通過關鍵字搜索問題,例如peer 您可能會找到有用的信息。

在此處輸入圖片說明

此時,您有兩個選擇。

  1. 升級到你想要的版本
  2. 暫時留下錯誤,等待穩定版本發布。

如果您選擇選項 1:
在許多情況下,該版本沒有latest標簽,因此不穩定。 因此,您必須檢查此更新中發生的更改,並確保任何內容都不會中斷。

如果您選擇選項 2:
如果將 pakageA 從版本 3 升級到 4 是微不足道的,或者如果 pakageB 的維護者尚未測試 pakageA 的版本 4 但表示應該沒有問題,您可以考慮留下錯誤。

在這兩種情況下,最好徹底測試它是否沒有破壞任何東西。

最后,如果你想知道為什么你必須手動做這樣的事情,這個鏈接解釋得很好。

此錯誤的最可能原因之一可能是您在 package.json 中定義了舊版本。 要解決此問題,請更改 package.json 中的版本以匹配 npm 抱怨的那些。

完成后,運行 npm install 並瞧!!

給定的答案並不總是有效。 如果它不能解決您的問題。 確保您還在package.json使用了正確的符號。 這對於解決這個頭痛非常重要。 例如:

warning " > @angular/compiler-cli@5.2.7" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > tsickle@0.25.6" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

所以我的打字稿需要在 2.4.2 和 2.6 之間,對嗎?

所以我將我的打字稿庫從使用"typescript": "^2.7"更改為使用"typescript": "^2.5" 似乎正確?

錯誤的。

^表示您可以使用"typescript": "2.5""2.6""2.7"等 npm ......

如果您想了解^~含義,請參閱: package.json 中的波浪號 (~) 和插入符 (^) 之間有什么區別?

您還必須確保該包存在。 也許沒有"typescript": "2.5.9"查找包號。 為了真正安全,如果您不想閱讀它們的意思,只需刪除~^

好的,所以我掙扎了很長時間試圖弄清楚這一點。 這是選項,因為當你用盡所有其他方式時..

完成后,它仍然有效,將您的實際代碼導入到這個新項目中。 修復較新版本的 angular 導致的任何編譯錯誤。

這就是為我所做的.. 1 小時的返工 vs 6 小時的試圖找出 wtf 是錯誤的.. 希望我以這種方式開始..

今天可用的Angular 2 rc.7 ,我在rxjs@5.0.0-beta.12 UNMET PEER DEPENDENCY 上遇到了類似的問題。

如果您像我一樣,只是將@angular/...rc.6替換為@angular/...rc.7 - 這還不夠。 因為,例如, @angular/router沒有rc.6版本。

在這種情況下,最好在快速入門中查看package.json

如果您使用的是 npm v6 或更早版本,您將收到此警告。 在 npm v7.0 之后,npm 開發團隊已經聲明他們將自動安裝所有對等依賴項。 因此,現在您不想手動安裝對等依賴項。

您可以使用此命令安裝 npm v7.0,

npm install -g npm@7

從 Github 博客發布的這篇博文中了解有關 npm v7.0 的更多信息。

如果您希望保留當前版本的 angular,您可以訪問此版本兼容性檢查器來檢查哪個版本的 angular-material 最適合您當前的 angular 版本。 您還可以使用 angular-material compatible 來檢查 angular-material 的對等依賴項

嘗試修復依賴項上的安全漏洞問題時,也會出現此問題。

這是我所做的:審核安裝的依賴項

npm audit

如果有可用的修復程序,運行以下命令將在大多數情況下解決問題:

npm audit fix

有些問題會有SEMVER WARNING ,點擊鏈接會給我們提示如何進行手動審查和/或下一步做什么。

做更多的研究讓我發現了這個命令:

npm upgrade

似乎npm audit fix沒有考慮更新對等依賴項,並且運行npm upgrade將修復未滿足的對等依賴項。 現在檢查我們是否通過運行解決了問題:

npm list

這將為我們提供項目的所有依賴項,並警告我們任何未滿足的 peer deps 錯誤。 在大多數情況下,升級實際上比保留您正在使用的舊版本軟件包要好,如果您沒有安全漏洞問題, npm install也是一個可行的選擇。

我刪除了package-lock.jsonnode_module ,切換到YARN ,這解決了問題

您可以通過全局安裝 UNMET 依賴項來解決。

示例: npm install -g @angular/common@4.4.6

一一安裝。 它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM