Przejdź do treści

NVM - Zarządzanie wersjami Node.js

Wyobraź sobie teraz sytuację - dziś uruchamiasz projekt w wersji Node.js 14, a kilka miesięcy później okazuje się, że projekt, który jeszcze nie został udostępniony szerszemu gronu, już wykorzystuje teoretycznie “starą” wersję środowiska uruchomieniowego.

Powrót do projektu utworzonego rok czy dwa lata wcześniej staje się udręką. Bo skąd u licha wezmę Ci teraz Node.js w wersji 8 czy, co gorsza, 6!?

Nie brzmi dobrze, prawda?

Pytanie?

Jak w takim razie uruchamiać aplikacje oparte o różne wersje Node.js na tym samym systemie?

Na szczęście, nie potrzeba wirtualnej maszyny czy instalacji oraz konfiguracji środowiska uruchomieniowego w Dockerze (choć ten drugi sposób też jest bardzo przyjemny i o nim na pewno coś więcej napiszę w przyszłości).

Natomiast istnieje rozwiązanie - NVM, które umożliwia nam bezpośrednie przełączanie się pomiędzy poszczególnymi wersjami Node.js na naszym systemie operacyjnym.

Gdybyśmy mieli opisać NVMa to jest on menadżerem wersji Node.js, stworzonym do instalacji per użytkownik i używanym per shell użytkownika. Jest kompatybilny z shellami, implementującymi POSIX tj. sh, dash, ksh, zsh, bash dla platform uruchomieniowych: Unix, macOS oraz Windows WSL.

Dzięki NVM, za pomocą prostego polecenia (wpisywanego w konsoli) możemy przełączać się pomiędzy aktualnie wykorzystywaną wersją Node.js. Wystarczy wykonać nvm use 16 aby korzystać z podanej wersji.

Przykład użycia NVM

Przykład użycia NVM

Instalacja

Instalację należy rozpocząć od uruchomienia jednego z dwóch poleceń w konsoli:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

// lub:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

Następnie po instalacji należy zrestartować konsolę. Niezbędne do działania wpisy, powinny zostać dodane na końcu pliku:

  • bash: ~/.bashrc
  • zsh: ~/.zshrc
  • ksh: ~/.profile

Instalacja oraz przykładowe rozwiązania typowych problemów opisane zostały w dokumentacji NVM.

Podstawowe polecenia NVM

Warto rzucić okiem na resztę przykładowych poleceń, które możemy wykonywać za pomocą NVMa:

Instalacja nowej wersji Node.js:

nvm install 16

Listowanie zainstalowanych wersji:

nvm ls

Zmiana kontekstu aktualnie wykorzystywanej wersji:

nvm use 16

Sprawdzenie, z jakie wersji aktualnie korzystamy:

nvm current

Uruchomienie pliku JS na podstawie konkretnej wersji:

nvm run 16.2.0 app.js

Stworzenie aliasu do wybranej wersji:

nvm alias myapp 16.2.0

Czy da się przypisać wersje Node.js do projektu?

Aby uniknąć ciągłego pamiętania dokładnej wersji, która wykorzystywana jest w projekcie, możemy skorzystać rozwiązania opartego o plik .nvmrc.

Alternatywne rozwiązania

Przy okazji warto wspomnieć o rozwiązaniach alternatywnych takich jak nodenv i nodeenv.

Dla mnie jednak do tej pory NVM był wystarczającym rozwiązaniem, a zarazem przyjemnym w użyciu