2016-08-18 14 views
13
$ npm install 
[email protected] /Users/antpaw/my_module 
├── [email protected] 
└── UNMET PEER DEPENDENCY [email protected]^2.74.0 

npm WARN [email protected] requires a peer of [email protected]^2.74.0 but none was installed. 

Nie rozumiem, jak to może być tylko ostrzeżenie. To bardzo ważna sprawa dla mojej aplikacji, jeśli "żądanie" nie zostanie zainstalowane, a moja aplikacja ulegnie awarii.Sprawdzanie zależności peer mma

Jak mogę dokonać npm install wyjście z 1 jeśli zależność peer ma niezaspokojone czy istnieje coś takiego polecenia npm do-i-have-everything-i-need-installed że wyjdzie z 1?

+0

Prawie działa jak zaprojektowano; jeśli chcesz, aby zależność była instalowana, gdy twój moduł jest zainstalowany, gdy używasz 'zależności'. Jeśli chcesz, aby konsumenci zarządzali, która wersja 'request' jest zainstalowana, użyjesz' peerDependency'. Instalacja tego wymaga tylko dwóch kroków; raczej trzy, jeśli nie uda ci się zainstalować ... Prawdopodobnie lepiej byłoby zrobić "zależność" od głównej wersji: "2.x", w ten sposób zostanie ona zainstalowana, ale zostanie odfiltrowana na komputerze użytkownika. blisko związane: http://stackoverflow.com/questions/35207380/how-to-install-npm-peer-dependencies-automatically –

Odpowiedz

4

Wygląda jakbym znalazł sposób, aby wyjść z 1 po/przed (myślę, że kolejność nie ma znaczenia) robi ogólną npm install trzeba uruchomić npm install my_module który zakończy się 1. Oznacza to, że mogę zdefiniować listę modułów, które chcę mieć dokładnie to, czego potrzebują (zdefiniowane w peerDependencies) w moim skrypcie CI, nie ładne, ale lepsze niż nic.

Tak więc, nie łamie się bez względu na rodzaj zależności, które można zdefiniować w swoim package.json. npm install module_name załamie się, jeśli masz nonsens w swoim package.json.

3

Najprawdopodobniej używasz npm @ 3 (wersja 3).

Jak wskazano w dokumentacji, wersje npm 1 i 2 używane w większości przypadków do instalowania peerDependencies. Wersja 3 Npm zmienia to zachowanie i nie instaluje już peerDependencies, ale zamiast tego wyświetla ostrzeżenie, gdy peerDependencies nie jest zainstalowane.

npm wersje 1 i 2 automatycznie instalują zależności równorzędne, jeśli nie są jawnie zależne od wyższych w drzewie zależności. W następnej głównej wersji npm (npm @ 3), to już nie będzie miało miejsca. Otrzymasz ostrzeżenie, że peerDependency nie jest zainstalowane.

Przyczyny zmian były głównie w celu uniknięcia piekła zależnościami podczas korzystania peerDependencies lub większość czasu peerDependencies używane niewłaściwie. Istnieje wiele problemów związanych z npm Github dotyczących peerDependencies, takich jak this one, wyjaśniających niektóre problemy i co doprowadziło do rozwiązania problemu, aby nie instalować jeszcze wersji peerDependencies.

Jeśli aplikacja ulegnie awarii, jeśli request nie jest zainstalowana, w większości przypadków jest to wymagane. W chwili obecnej w środowisku npm, dependencies są pakiety, które require(), devDependencies są pakiety ty require() tylko dla rozwoju, badań itp

peerDependencies były pierwotnie zaprojektowane do rozwiązywania problemów z pakietami, które były głównie „wtyczki” dla inne frameworki lub biblioteki, zaprojektowane do użycia z innym pakietem "hosta", nawet jeśli nie używają bezpośrednio lub nie wymagają pakietu "hosta".

Na przykład wtyczki Grunt są przeznaczone do używania z programem Grunt, ale nigdy nie mają wartości require('grunt');. Dodanie grunt jako dependencies doprowadziłoby do pobrania nowej kopii pakietu, która nigdy nie byłaby używana. Nawet jeśli niektóre wtyczki mają bezpośrednie zależności od pakietu 'host' i określają pakiet 'host' w dependencies, to mogłoby to doprowadzić do wielu kopii pakietu 'host'.

peerDependencies jest sposobem na powiedzenie, że pakiet działa po podłączeniu w wersji pakietu „gospodarza”, więc jeśli zainstalować ten pakiet, ty należy również zainstalować ten drugi pakiet ręcznie.

To jest zachowanie, które obecnie masz, instalujesz aplikację, wymieniasz request jako peerDependencies, więc powinieneś zainstalować ją, by działała i usuwała ostrzeżenie, w przeciwnym razie musisz się przenieść do klasycznego dependencies.

+1

"PeerDependencies oznacza, że ​​pakiet działa po podłączeniu do wersji hosta "pakiet". Dokładnie. Moje pytanie brzmi: jak to może być ostrzeżenie? NPM wie, że mój pakiet hosta jest zepsuty i ostrzega mnie o tym (z wyjściem 0)? – antpaw

+1

* bieżący * punkt 'peerDependencies' pozwala teraz użytkownikowi końcowemu zarządzać nim i instalować go, aby uniknąć piekła zależności. Ostrzeże cię tylko wtedy, gdy brakuje 'peerDependencies' i że powinieneś go zainstalować, to nie będzie dla ciebie. Jedynym sposobem uzyskania automatycznej instalacji jest odejście od 'peerDependencies'. – HiDeo

+0

to świetny punkt, problem polega na wykonaniu tego punktu. Nie chcę automatycznej instalacji przez 'dependecies' ponieważ mógłbym skończyć z dwoma lub więcej różnymi wersjami tego samego modułu, który byłby naprawdę zły jest mój usecase (jest dużo usecase, gdzie to nie jest problem) . Właśnie dlatego używam 'peerDependencies'. "... brakuje i należy go zainstalować ..." Jak to jest "coś, co powinienem zrobić", ostrzeżenie, to nie ma dla mnie żadnego sensu? – antpaw

Powiązane problemy