Jak automatycznie zainstalować zależności równorzędne npm?

274

Na przykład, gdy instaluję Angular2:

npm install --save angular2
temp@1.0.0 /Users/doug/Projects/dougludlow/temp
├── angular2@2.0.0-beta.3 
├── UNMET PEER DEPENDENCY es6-promise@^3.0.2
├── UNMET PEER DEPENDENCY es6-shim@^0.33.3
├── UNMET PEER DEPENDENCY reflect-metadata@0.1.2
├── UNMET PEER DEPENDENCY rxjs@5.0.0-beta.0
└── UNMET PEER DEPENDENCY zone.js@0.5.11

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-promise@^3.0.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of rxjs@5.0.0-beta.0 but none was installed.
npm WARN angular2@2.0.0-beta.3 requires a peer of zone.js@0.5.11 but none was installed.

Czy istnieje magiczna flaga, którą mogę przekazać do npm, która również zainstaluje zależności równorzędne? Nie udało mi się go znaleźć ... Żmudne jest ręczne kopiowanie i wklejanie zależności równorzędnych i upewnianie się, że mam odpowiednie wersje.

Innymi słowy, wolałbym nie robić:

npm install --save angular2@2.0.0-beta.3 es6-promise@^3.0.2 es6-shim@^0.33.3 reflect-metadata@0.1.2 rxjs@5.0.0-beta.0 zone.js@0.5.11

Jaki jest lepszy sposób?

Douglas Ludlow
źródło
Czy już rozwiązałeś ten problem? Mam ten sam problem z instalacją angular2. Nawet po ręcznej instalacji es6-promise z opcją -g i ponownym spróbowaniu npm install -g angular2 otrzymuję ten sam błąd / ostrzeżenie o 5 niespełnionych zależnościach równorzędnych es6-obietnica, es6-shim, reflect-metadata, rxjs i zone.js
nttakr
4
@nttakr - tak, instalowanie dokładnie tych wersji, których chce, ponieważ zależności równorzędne pozbywają się ostrzeżenia. Nie chcesz instalować ich globalnie (z flagą -g). Chcesz zainstalować je lokalnie (flaga -S), ale jak powiedziałem, muszą to być dokładne wersje (tj .: [email protected]wymaga es6-promise@^3.0.2). Chcę jednak wiedzieć, czy istnieje polecenie / flaga, która automatycznie instaluje zależności równorzędne.
Douglas Ludlow,
@DouglasLudlow jakiej wersji NPM używasz?
peteb
@peteb: npm -v=>3.5.3
Douglas Ludlow
Mam ten sam problem i nie znalazłem wydajności rozwiązania ...
youngwind

Odpowiedzi:

178

Automatyczna instalacja zależności równorzędnych została jawnie usunięta za pomocą npm 3, ponieważ powoduje więcej problemów niż próbowała rozwiązać. Możesz przeczytać o tym tutaj na przykład:

Więc nie, z podanych powodów nie możesz zainstalować ich automatycznie z npm 3 w górę.

migg
źródło
4
Tak, widziałem to: github.com/npm/npm/issues/6565 ... Miałem tylko nadzieję, że nadal możesz opcjonalnie zainstalować je z flagą lub czymś takim. Chyba będę musiał otworzyć problem lub coś takiego.
Douglas Ludlow,
157
Jak radzisz sobie z tego rodzaju problemem? Nie jestem ekspertem npm, więc kiedy czytam „x wymaga peera y, ale żadnego nie znaleziono”, zadaję sobie pytanie „który peer?” i „jak mogę sprawić, żeby wszystko znów działało?” Czy jest jakiś proces? Czy zagłębiasz się w kod x i y, dopóki nie dowiesz się, czego brakuje? Kiedy dowiesz się, czego brakuje, co dalej? Dzięki!
Dan Cancro
81
Ach, to jest angielski problem: „x wymaga peera y, ale żaden nie został zainstalowany” powinno być „x wymaga peera, y, ale y nie został zainstalowany”. Zrozumiałem to jako „x wymaga jednego z rówieśników y, ale ten równorzędny nie został zainstalowany i nie mówimy, który z rówieśników y jest potrzebny”.
Dan Cancro
1
Również jeśli ręcznie zainstaluję wymienione zależności równorzędne, otrzymam je jako extraneouspakiety
plsnoban
3
Są „obce”, ponieważ musisz je dodać do zależności pakietu.
Dinoboff,
37

Rozwiązałem to, przepisując pakiet.json z dokładnymi wartościami ostrzeżeń o:

npm WARN angular2@2.0.0-beta.3 requires a peer of es6-shim@^0.33.3 but none was installed.

package.json: "es6-shim": "^ 0.33.3",

npm WARN angular2@2.0.0-beta.3 requires a peer of reflect-metadata@0.1.2

package.json: „reflect-metadata”: „0.1.2”,

Delete node_modules directory

npm install
MrLehiste
źródło
15
Być może npm cache clean, npm installmoże być lepsze niż czyszczenie modułów node_modules? Zawsze powstrzymuję się od usuwania modułów node_modules, wolę dowiedzieć się, o co chodzi, niż wymazać katalog.
Bruno,
Nie sądzę, że jest to bardzo bezpieczny pomysł dla ludzi, aby po prostu zmusić go do działania. Mają większe zmiany, które pogarszają ich konflikty: kod niezgodny z biblioteką.
zoomlar
Dostałem następujący komunikat o błędzie podczas próby uruchomienia pamięci podręcznej npm clean: npm ERR! Począwszy od npm @ 5, pamięć podręczna npm leczy się z problemów związanych z uszkodzeniem, a dane wyodrębnione 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”. Z drugiej strony, jeśli debugujesz problem z instalatorem, możesz npm install --cache /tmp/empty-cacheużyć tymczasowej pamięci podręcznej zamiast nukania rzeczywistej pamięci podręcznej. npm ERR! npm ERR! Jeśli masz pewność, że chcesz usunąć całą pamięć podręczną, ponownie uruchom to polecenie, używając opcji --force.
Tarun
22

Cheat code pomocny w tym scenariuszu i niektórych innych ...

├── UNMET PEER DEPENDENCY @ kątowy / wspólny @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / compiler-cli @ 4.0.2

├── UNMET PEER DEPENDENCY @ kątowy / rdzeniowy @ 4.0.2

├── UNMET PEER DEPENDENCY @ kątowa / formy @ 4.0.2

├── UNMET PEER DEPENDENCY @ kątowa / http @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser @ 4.0.2

├── UNMET PEER DEPENDENCY @ angular / platform-browser-dynamic @ 4.0.2>

  1. skopiuj i wklej swój błąd do edytora kodu.
  2. Podświetl niechcianą część za pomocą swojego cursera. W tym przypadku „M UNMET PEER DEPENDENCY”
  3. Naciśnij kilka razy klawisze Command + d .
  4. Naciśnij dwukrotnie Usuń . (Naciśnij spację, jeśli przypadkowo zaznaczyłeś „M UNMET PEER DEPENDENCY”.)
  5. Naciśnij raz. Dodaj „instalację npm”
  6. Naciśnij raz. Dodaj „--zapisz
  7. Skopiuj swoje rzeczy z powrotem do cli i uruchom

npm install @ angular / common @ 4.0.2 @ angular / compiler @ 4.0.2 @ angular / compiler-cli @ 4.0.2 @ angular / core @ 4.0.2 @ angular / form @ 4.0.2 @ angular / http @ 4.0 .2 @ angular / platforma-browser @ 4.0.2 @ angular / platform-browser-dynamic @ 4.0.2 --save

zoomlar
źródło
8
Ta opcja --savenajwyraźniej nie jest już wymagana od wersji npm 5.0.0: stackoverflow.com/a/19578808/12484
Jon Schneider
12

Projekt npm-install-peerswykryje partnerów i zainstaluje je.

Ponieważ v1.0.1nie obsługuje automatycznego zapisywania package.json, co zasadniczo rozwiązałoby naszą potrzebę tutaj.

Dodaj swoje wsparcie do wydania w locie: https://github.com/spatie/npm-install-peers/issues/4

deepelement
źródło
36
Podczas biegu przekazał mi tę wiadomość. This package doesn't seem to have any peerDependencies
Thabung
2
Mam tę samą wiadomość.
Thibault Boursier
7
Jak rozumiem, npm-install-peerszainstaluję peerDependencieszarejestrowany w package.json. Nie zainstaluje peerDependencieszależności takich jak angular2.
drizzd
Tak, do drugiego komentarza @drizzd: npm-install-peersjest przeznaczony tylko do instalacji "peerDependencies"wymienionych w pakiecie.json projektu. Próbujesz zainstalować "peerDependencies"wymienione w każdym z node_modules/<package>/package.jsonplików, a nie bezpośrednie zależności równorzędne.
Will Farley,
5

Te błędy występowały podczas tworzenia pakietu npm, który miał peerDependencies. Musiałem upewnić się, że wszystkie peerDependenciessą również wymienione jako devDependencies. Projekt nie używałby automatycznie globalnie zainstalowanych pakietów.

Joshweir
źródło
To fajne rozwiązanie, ponieważ zwykłe dodawanie „zależności” jest nieco niezdarne!
Ashot
0

Zainstaluj przędzę i uruchom

przędza globalna dodaj install-peerdeps

Carlos
źródło
-5

Wykonaj to: npm install-test

Ivan Ferrer
źródło