Dlaczego instalacja npm mówi, że mam niespełnione zależności?


404

Mam pakiet węzłów. Kiedy biegnęnpm install z katalogu głównego pakietu, instaluje kilka rzeczy, ale następnie drukuje kilka komunikatów o błędach, które wyglądają tak:

npm WARN unmet dependence / Users / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob wymaga graceful-fs@'~1.2.0 ', ale załaduje się

Muszę się mylić, co dokładnie npm installrobi. Jeśli wykryje zależność, czy nie powinna go zainstalować? W jakich warunkach wyświetla mi się taki komunikat o błędzie i jak mogę rozwiązać zależności?

Odpowiedzi:


397

Uważam, że dzieje się tak, ponieważ rozdzielczość zależności jest nieco zepsuta, patrz https://github.com/npm/npm/issues/1341#issuecomment-20634338

Oto możliwe rozwiązanie:

  1. Ręcznie zainstaluj moduły najwyższego poziomu, zawierające niezaspokojone zależności: npm install findup-sync@0.1.2

  2. Przebuduj swój pakiet.json. Umieść wszystkie moduły wysokiego poziomu (służy jako zależność dla innych modułów) na dole.

  3. Ponownie uruchom npm installpolecenie.

Problem może być spowodowany tym, że npm nie udało się pobrać całego pakietu z powodu przekroczenia limitu czasu lub coś innego.

Uwaga: Możesz również zainstalować uszkodzone pakiety ręcznie, używając npm install findup-sync@0.1.2 .

Przed uruchomieniem npm installpomocne mogą być następujące kroki:

  • usuń node_modules za pomocą rm -rf node_modules/
  • biegać npm cache clean

Dlaczego czasami konieczne jest „usuwanie węzłów”? Jeśli podczas instalacji moduł zagnieżdżony nie zostanie zainstalowany npm install, kolejne npm installnie wykryją brakujących zagnieżdżonych zależności.

W takim przypadku czasami wystarczy usunąć zależność najwyższego poziomu brakujących modułów zagnieżdżonych i uruchomić npm installponownie. Widzieć


22
Usunięcie modułów węzła i wyczyszczenie pamięci podręcznej sprawiło, że zadziałało to dla mnie.
MarkoHiel,

4
usunięcie „node_modules”, uruchomienie „npm cache clean”, a następnie uruchomienie „npm install” naprawiło mój problem. Musiałem uruchomić „npm_install” trzy razy, aż wszystkie zależności zostały załadowane bez błędów.
hendrix,

2
jeśli npm cache cleannie działa z powodów dostępu, spróbuj sudo npm cache clean.
Soroush

12
@Soroush na ślepo dodanie sudo do rzeczy, które nie działają poprawnie, nie naprawia ich magicznie, po prostu oznacza, że ​​nie wiesz, co się dzieje.
Edgar Aroutiounian

5
dlaczego kiedykolwiek inne „rozwiązanie” dla npm zawiera rm r node_modules? i dlaczego jest to tak naprawdę jedyna opcja w większości przypadków? nie tak myślę, że powinien działać menedżer pakietów
phil294

83

Zdarzyło mi się, gdy WIFI uległo awarii podczas npm install. Usunięcie node_modulesi ponowne uruchomienie npm installnaprawiło to.


26
i spróbuj npm cache clean.
ijse

5
Ponowna instalacja węzła prawdopodobnie nie jest konieczna, ale między zrobieniem tego npm cache cleana usunięciem node_modulesta rada działała dla mnie.
RichLitt

@RichLitt, tak, robienie npm cache cleantego nie było dla mnie wystarczające, musiałem je również usunąć node_modules, aby działało po awarii sieci podczas instalacji.
Mark Tomlin,

Nie wiem, który node_moduleskatalog usunąć? Mam podobny problem z błędem/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong,

1
@wuliwong Najwyższy poziom.
geon

33

Rozwiązałem problem za pomocą tych wierszy poleceń

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

Zrobione!


5
Po uruchomieniu sudo npm update -g npm, mój npm stał się bezużyteczny, każda próba zainstalowania czegokolwiek skutkuje „npm ERR! Nie mogę znaleźć modułu„ read-package-json ”” będę musiał to głosować
MichaelB

To zadziałało dla mnie i dla innych ludzi, może masz inny problem. Spróbuj zainstalować moduł read-package-json globalnie sudo npm install -g read-package-jsonLub zainstaluj ponownie npm
zatamine

8
zastrzeżenie: nie powinieneś używać sudo npm, sugeruje się zamiast tego zmianę uprawnień lub własności katalogu, który npm chce również napisać.
Sgnl

1
może też dodać tam „npm cache clean”
Alexander Mills,

1
Nie używaj sudoz npm
Grant

11

Uaktualnienie NPM do najnowszej wersji może w tym bardzo pomóc. Powyższa odpowiedź dule ma rację, mówiąc, że zarządzanie zależnościami jest nieco zepsute, ale wydaje się, że dotyczy to głównie starszych wersji npm.

Polecenie npm listwyświetla listę wszystkich zainstalowanych node_modules. Kiedy przeprowadziłem aktualizację z wersji 1.4.2 do wersji 2.7.4, wiele modułów, które były wcześniej oflagowane WARN unmet dependency, nie było już takich.

Aby zaktualizować npm, powinieneś wpisać npm install -g npmna MacOSX lub Linux. W systemie Windows stwierdziłem, że ponowne pobranie i ponowne uruchomienie instalatora nodejs było bardziej skutecznym sposobem aktualizacji npm.


Miałem ten sam problem z wersją npm dystrybuowaną w repozytoriach CentOS 7. Zainstalowałem najnowszą wersję npm z node.js i problem zniknął, więc myślę, że masz rację, może to być problem ze starą wersją.
Elouan Keryell-Even

9

Powyższe odpowiedzi nie pomogły mi w pełni nawet po usunięciu node_moduleskatalogu.

Poniższe polecenie pomogło mi w końcu:

npm config set registry http://registry.npmjs.org/

Zauważ, że powoduje to przeciągnięcie modułów węzła przez niepewne połączenie HTTP.

Src: https://stackoverflow.com/a/13119867/4082503


Pomogło mi to, podobnie jak mój host, przekierowywać ruch.
dimiguel

1
@dimgl miło wiedzieć :)
Vinay Vemula

1
@Dejel próbowałeś również innych odpowiedzi. Być może będziesz musiał uruchomić npm installwiele razy i / lub ręcznie zainstalować niektóre pakiety węzłów jeden po drugim.
Vinay Vemula,

4

Dla każdego -- UNMET PEER DEPENDENCY, np. -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2, zainstaluj tę zależność, npm install --save rxjs@5.0.0-rc.2dopóki nie będzie już więcejUNMET DEPENDENCIES .

Powodzenia.


1
Pozostawiają mi te same błędy, w tym nowy:ERR! code 1
Wouter Vanherck

1
@ WouterVanherck możesz spróbować rm -rf node_modules, a następnie npm cache cleani npm install. Jeśli nadal nie działa, proponuję, aby ponownie rm -rf node_modules, wtedy npm i -g yarni wtedy yarn install. Przędza jest dość dobra w zarządzaniu node_modules. Powodzenia.
Akash

1
Tak, po co peerDependenciesjest. Aby popchnąć Cię do świadomego wyboru wersji.
Kamafeather

3

Uruchomiłem npm listi zainstalowałem wszystkie pakiety wymienione jako NIEZALEŻNOŚĆ

Na przykład:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


2

To rozwiązało dla mnie:

  1. Popraw numery wersji w package.jsonzależności od błędów;
  2. Usuń node_modules( rm -rf node_modules);
  3. Uruchom ponownie npm install.

Powtarzaj te kroki, aż nie będzie więcej błędów.


1

Coś w podobnym stylu dodałbym jeszcze jeden krok.

Zauważ, że w wersji npm> 1.4.9, 'instalacja npm' instaluje devDependencies. Najpierw spróbuj usunąć istniejące moduły i pamięć podręczną:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

Więc spróbuj:

npm install --dev
npm update --dev

To przynajmniej rozwiąże rekurencyjne rozwiązywanie zależności.


6
do czego służy flaga --dev?
Alexander Mills,

1

- dev instaluje rekursywnie devDependencies (i działa wiecznie ...) w jaki sposób może pomóc w rozwiązaniu różnic wersji?

Możesz spróbować usunąć folder node_moduls, następnie wyczyścić pamięć podręczną npm, a następnie ponownie uruchomić polecenie „npm i”


1

Miałem podobny problem podczas instalowania React Native CLI. Nie byłem pewien, który /node_moduleskatalog powinienem usunąć po przeczytaniu tutaj odpowiedzi. W końcu po prostu uciekłem

npm update -g

i potem udało się zainstalować pakiet.


1

Próbowałem pracować nad działającym automatycznym systemem wdrażania npm install, więc wiele z tych rozwiązań nie działałoby dla mnie w zautomatyzowanym systemie. Nie miałem możliwości usuwania / ponownego tworzenia, node_modules/ani nie mogłem łatwo zmienić wersji Node.js.

Skończyło się na tym, że uruchomiłem npm shrinkwrap- dodając npm-shrinkwrap.jsonplik do mojego pakietu wdrożeniowego i odtąd uruchamiając instalacje. To rozwiązało problem; z plikiem shrinkwrap jako „pomocnikiem”, npm wydaje się być w stanie znaleźć odpowiednie pakiety i zainstalować je dla mnie. (Shrinkwrap ma również inne funkcje, ale właśnie do tego potrzebowałem w tym konkretnym przypadku).


1

Napotkałem ten problem podczas instalowania pakietów reagujących i działało to dla mnie: npm install --save <package causing this error>



1

npm installzainstaluje wszystkie paczki z npm-shrinkwrap.json, ale może zignorować paczki package.json, jeśli nie są ustawione wcześniej.

Jeśli twój projekt ma npm-shrinkwrap.json, upewnij się, że uruchomiłeś npm shrinkwrapgo, aby go zregenerować, za każdym razem, gdy dodajesz dodaj / usuń / zmień package.json.



0

Aktualizacja do 4.0.0

Aktualizacja do 4 jest tak prosta, jak aktualizacja zależności Angular do najnowszej wersji i podwójne sprawdzenie, czy chcesz animacji. Będzie to działać w większości przypadków użycia.

W systemie Linux / Mac:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

W systemie Windows:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

Następnie uruchom dowolne normalnie używane polecenie ng serw lub npm start i wszystko powinno działać.

Jeśli korzystasz z animacji, zaimportuj nowy BrowserAnimationsModulez @angular/platform-browser/animationskatalogu głównego NgModule. Bez tego kod zostanie skompilowany i uruchomiony, ale animacje spowodują błąd. Import z @angular/corebył przestarzały, użyj importu z nowego pakietu

import { trigger, state, style, transition, animate } from '@angular/animations';.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.