JavaScript i cały ekosystem z nim związany jest bardzo rozbudowany i wydaje się, że wcale nie zamierza przestać się rozrastać. Można czasem usłyszeć, że tydzień, w którym nie powstał nowy framework do JSa jest tygodniem straconym. Masa bibliotek w różnych wersjach, kolejne języki rozbudowujące możliwości JavaScriptu zmieniające to, jak go postrzegamy np.: TypeScript czy CoffeeScript, do tego jeszcze Node.js oraz różne silniki w przeglądarkach. W rezultacie mamy całkiem sporą listę i coraz więcej pracy związanej z zarządzaniem tym wszystkim.
Dlatego tym bardziej warto zainteresować się rozwiązaniami, które mają na celu ułatwić nam życie.
Jednym z nich jest nvm, czyli Node Version Manager, który ma nam pomóc zarządzać wersjami Node.js.
Cel jest prosty - umożliwić nam szybkie i łatwe przeskakiwanie między wersjami Node niewymagające uprawnień administratora.
Zalety
+ instalacja nie wymaga uprawnień roota,
+ dostęp do wielu wersji Node,
+ szybkie i wygodne zmiany wersji noda,
+ możliwość wykorzystania różnych wersji Node dla różnych projektów.
Wady
- nvm manipuluje .bashrc,
- lag na starcie bash.
Podstawowe polecenia nvm
wylistowanie wszystkich dostępnych wersji
nvm ls-remote
Zwróci nam wynik w postaci listy dostępnych wersji z zaznaczoną obecnie używaną.
$ nvm install node
Downloading and installing node v12.2.0...
Downloading https://nodejs.org/dist/v12.2.0/node-v12.2.0-linux-x64.tar.xz...
######################################################################### 100,0%
Computing checksum with sha256sum
Checksums matched!
Now using node v12.2.0 (npm v6.9.0)
instalacja najnowszej wersji oznaczonej jako Long-term support
nvm install --lts
poniżej rezultat
$ nvm install --lts
Installing latest LTS version.
Downloading and installing node v10.15.3...
Downloading https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz...
######################################################################### 100,0%
Computing checksum with sha256sum
Checksums matched!
Now using node v10.15.3 (npm v6.4.1)
instalacja konkretnej wersji Node (po instalacji aktualnie używaną wersją jest ta ostatnio zainstalowana)
nvm install {VERSION}
tu rezultat wygląda bardzo podobnie
$ nvm install 8.6.0
Downloading and installing node v8.6.0...
Downloading https://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-x64.tar.xz...
######################################################################### 100,0%
Computing checksum with sha256sum
Checksums matched!
Now using node v8.6.0 (npm v5.3.0)
przestawienie domyślnej wersji Node
$ nvm alias default 10.15.1
default -> 10.15.1 (-> v10.15.1)
wylistowanie wszystkich zainstalowanych wersji
nvm ls
zwraca nam listę aktualnie zainstalowanych wersji
v10.15.0
-> v10.15.1
v10.15.2
użycie konkretnej wersji
nvm use Node {VERSION}
nvm potwierdzi nam zmianę wersji
$ nvm use 12.2.0
Now using node v12.2.0 (npm v6.9.0)
uruchomienie aplikacji w wybranej wersji Node
nvm run {VERSION} index.js
tu również nie będziemy mieć wątpliwości z jaką wersją uruchomiliśmy aplikację
$ nvm run 8.6.0 index.js
Running node v8.6.0 (npm v5.3.0)
usunięcie wybranej wersji Node
nvm uninstall {VERSION}
potwierdzenie usunięcia
$ nvm uninstall 8.6.0
Uninstalled node v8.6.0
Ponadto .nvmrc.
Warto pamiętać, że w ramach projektu możemy łatwo ustalić jak wersja Node ma być wykorzystywana, a nvm zajmie się resztą.
Do projektu wystarczy dodać plik .nvmrc.
9.0.1
i wykonać polecenie
nvm use
Uwaga na koniec
Nvm zwiększa objętość pliku .bashrc co spowalnia działanie terminala, trzeba się zastanowić czy na środowisku produkcyjnym jest to koszt, który chcemy ponosić.