Jak być na bieżąco z zależnościami w środowisku Node.js

Ilość zależności w projekcie The Ship Game wynosi 51 różnych wpisów w pliku package.json
. Trzeba pamiętać że każdy z tych zależności posiada, także swoje – tworząc 'niekończące’ się drzewo zależności.
Jak żyć?
Z pomocą przychodzi npm-check-updates
. Instalacja wygląda tak:
npm install -g npm-check-updates
A użycie nie może być prostsze. Komenda ncu
poszuka pliku package.json
i zwróci możliwe pakiety do aktualizacji. Przed kontynuacją z tematem tego posta trzeba wyjaśnić jak zapisywana jest wersja w środowisku Node.js oraz jak działają zakresy wersji.
Klika słów o semver – czyli o sposobie wersjonowania pakietów w środowisku Node.js (i nie tylko tam)
Każdy pakiet jest oznaczany 3 liczbami oddzielonymi kropką x.y.z
.
Zwiększenie:
x
(major) oznacza zmianę interfejsu. I inne zmiany powodujące złamanie kompatybilności wstecznej.y
(minor) oznacza zmianę implementacji, bez zmiany interfejsu. Dodanie nowej funkcjonalności, która nie wpływa na kompatybilność z poprzednią wersją.z
(patch) oznacza naprawę błędu z zachowaniem kompatybilności wstecznej.
Zwiększenie x
powoduje wyzerowanie y
i z
oraz zwiększenie y
powoduje wyzerowanie z
.
Więcej o semver można poczytać na stronie semver.org.
Zakresy wersji w zależnościach wewnątrz package.json
Program ncu
wykrywa dodatkowe znaczki (lub ich brak) i w ten sposób proponuje (lub nie) nowe wersje pakietów.
Najczęściej stosowane znaczki przed numerem wersji.
version
Wersja musi być taka jak podanyversion
>version
Wersja musi być większa niżversion
>=version
Wersja musi być większa lub równaversion
<version
Wersja musi być mniejsza niżversion
<=version
Wersja musi być mniejsza lub równa niżversion
i dwa najciekawsze zapisy:
~version
Pozwala na zmiany na poziomie patcha. Zapis~1.2.3
działa jak1.2.z
gdziez
to liczba większa niż 3.^version
Pozwala na zmiany na poziomie wersji minor. Zapis^1.2.3
działa jak1.y.z
gdziey
liczba większa niż 2 orazz
to liczba większa niż 3. NIESPODZIANKA działanie^
się zmienia jeżeli w wersji występują zera!. Zapis^0.2.3
oznacza0.2.z
gdziez
to liczba większa niż 3.
Więcej znaczków (tych mniej popularnych) i odstępstw od reguł znajdziesz na stronach dokumentacji npm
o package.json
oraz semver
Korzystanie z ncu
Wracając do ncu
uruchomienia tego programu w katalogu z źródłami mojej gry, dostaje taki wynik.
ncu
informuje mnie, że podane pakiety jak babel-loder
oraz extract-text-webpack-plugin
znajdują w zadeklarowanym zakresie (nie zmieniła się wersja major
). Dlatego też wystarczy uruchomić polecenie npm update
, które ściągnie świeże pakiety albo mogę użyć polecenia ncu -a
i zmienić wpisy w pliku package.json
, które wymuszają użycie wersji ^6.4.0
i ^2.1.0
.
dodanie przełącznika -u
uruchamiając program tak ncu -u
dodatkowo aktualizuje wpisy w pliku package.json
na te proponowane.
Aktualizowanie globalnych programów w Node.js
Można zobaczyć listę programów do aktualizacji poprzez komendę ncu -g
Niestety nie można zaktualizować wszystkich programów jednym poleceniem. Na rzecz każdego programu trzeba wpisać npm install -g [nazwa programu]
.