/ / Jak ustabilizować system zależności npm {Node}? - node.js, angular, angular-cli, npm-install, package.json

Jak ustabilizować system zależności {Node} npm? - node.js, kątowy, kątowy-cli, npm-install, pakiet.json

Korzystam z angular-cli i buduję SPA za pomocąKątowy 2. Mam system kompilacji Jenkins dla mojej aplikacji, w której za każdym razem, gdy następuje zmiana w moim repozytorium projektu, uruchamiana jest kompilacja, która zasadniczo usuwa całą node_modules folder, a następnie robi npm zainstalować a następnie mój proces kompilacji. Wszystko to odbywa się zdalnie na komputerze z systemem Linux.

Problem:
Teraz mam do czynienia z zależnością drugorzędną i trzeciorzędną. Większość zależności (jeśli nie wszystkie) instalowanych przy użyciu npm ma swoje packagae.json plik, który z kolei ma swój własny itd. Więc nawet jeśli zamrożę wersje w moim głównym package.json pliku poprzez usunięcie karetek lub tyldy, nie ma sposobu, aby kontrolować wersję zależności drugorzędnych i trzeciorzędnych. To powoduje wiele UNMET PEER DEPENDENCY błędy, ponieważ jedna zależność potrzebuje jednej wersji tego samego komponentu, podczas gdy druga potrzebuje innej!

Pytanie:
Więc moje pytanie brzmi: w jaki sposób mogę się upewnić, że tak się nie stanie i uzyskać stabilną instalację zależności?

Odpowiedzi:

2 dla odpowiedzi № 1

Możesz zatrzymać swoje package.json jak jest i biegnij npm shrinkwrap, który utworzy nowy plik npm-shrinkwrap.json z dokładnymi wersjami całej hierarchii pakietów zainstalowanymi w momencie uruchomienia.

Jeśli zatwierdzisz ten plik, następnym razem uruchomisz npm install, npm powinien wykryć plik i go uszanować.

Dokumentacja:
https://docs.npmjs.com/cli/shrinkwrap

P.S.

Inną opcją, która działa podobnie, jest Facebook yarn klient npm (narzędzie podobne do lokalnego narzędzia npm).

Używa własnego yarn.lock plik i jest znacznie szybszy, ponieważ buforuje zależności we własnej pamięci podręcznej, dzięki czemu kolejne instalacje są znacznie szybsze.

Jednak w przypadku użycia na serwerze kompilacji konfiguracja może być trudniejsza. Dlatego podkreśliłem odpowiedź na samym NPM.