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 № 1Moż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.