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 podany version
  • >version Wersja musi być większa niż version
  • >=version Wersja musi być większa lub równa version
  • <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 jak 1.2.z gdzie z to liczba większa niż 3.
  • ^version Pozwala na zmiany na poziomie wersji minor. Zapis ^1.2.3 działa jak 1.y.z gdzie y liczba większa niż 2 oraz z to liczba większa niż 3. NIESPODZIANKA działanie ^ się zmienia jeżeli w wersji występują zera!. Zapis ^0.2.3 oznacza 0.2.z gdzie z 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].