Jak naprawić ostrzeżenie npm UNMET PEER DEPENDENCY?

223

Korzystam z systemu Windows 10 z węzłem 5.6.0 i npm 3.6.0. Próbuję zainstalować materiał kątowy i mdi w moim folderze roboczym. npm zainstaluj błędy mdi-material mdi z:

+-- 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.

Jak rozwiązać ten problem, aby zainstalować AngularJS Material i MDI?

Reza
źródło
Czy tego rodzaju błędy powodują jakiekolwiek problemy?
blackHawk
Nie dla Rezy, więc jest za późno, ale dla innych ... Spróbuj tego: npm zobacz rówieśnik z materiału kątowego Zależności
peter70
1
Ogólnie rzecz biorąc, nie zawsze możesz chcieć rozwiązać niezaspokojoną zależność. Na przykład, to, że jakiś pakiet ma zależność od other-package@^1.5.0, a masz inny [email protected], może nie być konieczne wycofanie wersji. Lepiej byłoby sprawdzić, czy rzeczywiście masz problemy z nowszą wersją.
John Pankowicz,

Odpowiedzi:

203

npm nie instaluje już zależności równorzędnych, więc musisz zainstalować je ręcznie, po prostu wykonaj npm installniezbędne operacje, a następnie spróbuj ponownie zainstalować główną.


Odpowiedz na komentarz:

jest dokładnie w tym komunikacie, mówi, które zależności brakuje

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` 

Więc musisz npm install angular angular-animate angular-aria angular-material angular-messages mdi

Datsik
źródło
Czy istnieje sposób na znalezienie depresji dla materiału kątowego, abym mógł zainstalować?
Reza
2
Czy chcesz dodać te nowe zależności do swojego package.json?
0xcaff,
2
@ffinatedmonkey, który byłby idealny
Datsik
9
@ cffinatedmonkey, jeśli podasz --saveprzełącznik npm, zaktualizuje pakiet.json dla ciebie (lub --save-devjeśli pakiet jest zależny od rozwoju)
McGuireV10
33
czyż nie chodzi o to, że npm zarządza wszystkimi tymi zależnościami? jeśli wykonam instalację npm, to otrzymam listę niezaspokojonych zależności, które muszę ręcznie dodać ręcznie do mojego pliku composer.json, jaką wartość w tym momencie otrzymuję od npm?
chiliNUT
66

UNMET PEER DEPENDENCYbłąd jest zgłaszany, gdy zależności jednego lub więcej modułów określonych w package.jsonpliku nie są spełnione. Dokładnie sprawdź ostrzeżenia i zaktualizuj package.jsonplik, dodając poprawne wersje zależności.

Następnie uruchomić

rm -rf node_modules/
npm cache clean
npm install

Spowoduje to prawidłowe zainstalowanie wszystkich wymaganych zależności.

JayKrish
źródło
3
czym jest zależność od rówieśników
aWebDeveloper
Podczas instalowania pakietu może z kolei zależeć od określonych wersji innych pakietów. Jeśli nie podasz poprawnej zależnej wersji pakietu, wówczas „Zależność równorzędna” nie zostanie spełniona. Aby rozwiązać ten problem, musisz zaktualizować oczekiwaną wersję pakietów zależnych.
JayKrish
4
To nie działało dla mnie. Nadal dostaję ostrzeżenie, że wymagany jest partner.
Adam Zerner,
1
Znacznie czystsze niż przyjęte rozwiązanie! Ten jeden zestaw kodu obsługuje każdy możliwy przypadek problemu operacji, a nie konkretny problem.
HoldOffHunger
użycie polecenia czyszczenia pamięci podręcznej npm daje błąd: Od npm @ 5 pamięć podręczna npm leczy się z problemów z uszkodzeniem, a dane pobrane z pamięci podręcznej są prawidłowe. Jeśli chcesz się upewnić, że wszystko jest spójne, użyj zamiast tego opcji „sprawdź pamięć podręczną npm”. npm ERR! Jeśli masz pewność, że chcesz usunąć całą pamięć podręczną, ponownie uruchom to polecenie, używając opcji --force.
CodeMonkey
30

W moim przypadku wszystkie zależności już tam były. W takim przypadku zaktualizuj NPM , ponieważ mógł ulec awarii. To rozwiązało mój problem.

npm install -g npm
Anuj Sharma
źródło
Pracował dla mnie. UNMET PEER DEPENDENCY typescriptPodczas próby instalacji wystąpił błąd tslint. po aktualizacji npm musiałem najpierw zainstalować maszynopis, a następnie zainstalować tslint.
Ravimallya
Z jakiegoś powodu musiałem uruchamiać go więcej niż raz, dopóki nie zaktualizuje wszystkich swoich zależności.
Coderer
To zepsuło mi npm i spowodowało wiele błędów.
Jack
14

Npm-install-peers pracował dla mnie.

npm install -g npm-install-peers
alexoviedo999
źródło
1
Nie działało dla mnie: „Wygląda na to, że ten pakiet nie ma żadnych zależności równorzędnych”. Mam jednak kilka komunikatów, takich jak „brak danych npm ERR! Peer dep: @ angular / common @ ^ 5.0.0 || ^ 6.0.0, wymagany przez @ agm / core @ 1.0.0-beta.3”
Almir Campos
2
Ten pakiet instaluje tylko bezpośrednie elementy równorzędne bieżącego pakietu i umiera nie obsługuje elementów równorzędnych elementów pakietu (dzieci).
Alex Skrypnyk
7

Jedną z najbardziej prawdopodobnych przyczyn tego błędu może być zdefiniowanie starszej wersji w pliku package.json. Aby rozwiązać ten problem, zmień wersje w pliku package.json, aby były zgodne z tymi, na które narzeka.

Po zakończeniu uruchom npm install i voila !!.

Thomas Mwania
źródło
6

Ta odpowiedź nie dotyczy wszystkich przypadków, ale jeśli nie możesz rozwiązać błędu po prostu wpisując npm install , te kroki mogą pomóc.

Powiedzmy, że masz ten błąd.

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.

Oznacza to, że zainstalowałeś wersję 4.2.0 pakietu A, ale pakiet [email protected] wymaga wersji 3.xx pakietu A. ( wyjaśnienie ^ )

Możesz więc rozwiązać ten problem, obniżając pakiet A do wersji 3.xx, ale zazwyczaj nie chcesz obniżać pakietu.
Dobra wiadomość jest taka, że ​​w niektórych przypadkach pakiet B po prostu nie dotrzymuje kroku pakietowi A, a opiekun pakietu B stara się podnieść zależność rówieśniczą pakietu A do 4.xx
W takim przypadku można sprawdzić, czy istnieje wyższa wersja pakietu B, która wymaga wersji 4.2.0 pakietu A w npm lub github.

Na przykład Idź do strony wydaniawprowadź opis zdjęcia tutaj

Często można znaleźć przełomowe zmiany dotyczące zależności.

packageB v4.0.0-beta.0

BREAKING CHANGE
package: requires packageA >= v4.0.0

Jeśli nie znajdziesz niczego na stronie wydania, przejdź do strony wydania i wyszukaj problem według słowa kluczowego jak peer. Możesz znaleźć przydatne informacje.

wprowadź opis zdjęcia tutaj

W tym momencie masz dwie opcje.

1) Uaktualnij do żądanej wersji
2) Na razie zostaw błąd, poczekaj na wydanie stabilnej wersji.

Jeśli wybierzesz opcję 1:
W wielu przypadkach wersja nie ma latest znacznika, dlatego nie jest stabilna. Musisz więc sprawdzić, co się zmieniło w tej aktualizacji i upewnić się, że nic się nie zepsuje.

Jeśli wybierzesz opcję 2:
Jeśli aktualizacja pakietu A z wersji 3 do 4 jest trywialna lub jeśli opiekun pakietu B nie przetestował jeszcze wersji 4 pakietu A, ale twierdzi, że nie powinno to stanowić problemu, możesz rozważyć pozostawienie błędu.

W obu przypadkach najlepiej dokładnie sprawdzić, czy niczego nie psuje.

Na koniec, jeśli chcesz wiedzieć, dlaczego musisz zrobić coś takiego ręcznie, ten link dobrze wyjaśnia.

ohkts11
źródło
3

Ok, więc długo walczyłem, próbując to rozgryźć. Oto opcja nuklearna , gdy wyczerpiesz wszystkie inne sposoby ...

  • Utwórz nowy folder na komputerze.
  • Pobierz zupełnie nową instalację Angulara - skorzystałem z tego przewodnika: https://coursetro.com/posts/code/55/How-to-Install-an-Angular-4-App
  • Uruchom, upewnij się, że działa
  • Następnie zainstaluj zależności jeden po drugim z pliku package.json
  • Uruchom go po zainstalowaniu każdego z nich

Gdy skończysz i nadal będzie działać, zaimportuj swój kod do nowego projektu. Napraw wszelkie błędy kompilacji w nowszej wersji przyczyn kątowych.

To właśnie to dla mnie zrobiło .. 1 godzina przeróbki w porównaniu do 6 godzin próbowania zrozumienia wtf była błędna .. szkoda, że ​​nie zrobiłem tego w ten sposób, aby zacząć ...

użytkownik230910
źródło
OP używa AngularJS
Edric
3

Podana odpowiedź nie zawsze będzie działać. Jeśli to nie rozwiąże problemu. Upewnij się, że używasz również właściwego symbolu w swoim package.json. Jest to bardzo ważne, aby naprawić ten ból głowy. Na przykład:

warning " > @angular/[email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.7".
warning " > [email protected]" has incorrect peer dependency "typescript@>=2.4.2 <2.6".

Więc mój maszynopis musi mieć wartość od 2.4.2 do 2.6, prawda?

Więc zmieniłem bibliotekę maszynopisów z używania "typescript": "^2.7"na używanie "typescript": "^2.5". Wydaje się poprawny?

Źle.

Te ^środki, które są w porządku z użyciem npm "typescript": "2.5"lub "2.6"lub "2.7"etc ...

Jeśli chcesz się dowiedzieć, co to znaczy ^i ~co oznacza: Jaka jest różnica między tyldą (~) a karetką (^) w pliku package.json?

Musisz także upewnić się, że pakiet istnieje. Może nie ma "typescript": "2.5.9"numerów numerów pakietów. Aby być naprawdę bezpiecznym, po prostu usuń ~lub ^jeśli nie chcesz przeczytać, co one oznaczają.

Samuel Thompson
źródło
Dziękuję za to wyjaśnienie. Co się stanie, jeśli użyję dwóch bibliotek, z których pierwsza (np. library-one) Używa np. Peer of package@<2.6a druga ( library-two) peer z package@>2.7? Czy w takim razie skończę z dwiema wersjami packagemojego kodu? Skąd mam wiedzieć, że kiedy go używam, library-onemuszę go używać, [email protected]tymczasem kiedy go używam, library-twomuszę go używać [email protected]?
tonix
2

Dzisiaj dostępny Angular 2 rc.7 , a ja miałem podobny problem z [email protected]UNMET PEER DEPENDENCY.

Jeśli, tak jak ja, po prostu wymienić @angular/...rc.6się @angular/...rc.7- to nie wystarczy. Ponieważ na przykład @angular/routernie ma rc.6wersji.

W takim przypadku lepiej przejrzyj pakiet.json w Szybki start

ktretyak
źródło
OP używa AngularJS
Edric
-6

można rozwiązać, instalując zależności UNMET globalnie.

przykład: npm install -g @ angular / common @ 4.4.6

zainstaluj jeden po drugim. to zadziałało dla mnie.

Srinivas Jatoth
źródło
Czy to naprawdę najlepsze rozwiązanie? Instalujesz globalnie, aby zignorować rzeczywisty „problem” związany z zależnościami projektu?
qx3
1
Spowoduje to zainstalowanie zależności globalnie na twoim komputerze. Twoi rówieśnicy nie będą w stanie rozliczać się z tego w udostępnianym środowisku.
AC Patrice,