apt install nodejs i po sprawie? Niestety nie.

Node.js z domyślnych repozytoriów Ubuntu czy Debiana jest zazwyczaj mocno leciwy. Do tego jeden projekt chce Node 18, drugi 20, a trzeci najnowszego, i wszystkie mają chodzić na tym samym serwerze. Z pakietami systemowymi robi się z tego niezły węzeł gordyjski.

Tu wkracza NVM (Node Version Manager). Instaluje Node.js w Twoim katalogu domowym, nie dotykając pakietów systemowych, i pozwala trzymać kilka wersji równocześnie. Przełączasz się między nimi jedną komendą.

Na Mikrusie#

W NOOBS-ie jest gotowy skrypt, który stawia NVM razem z najnowszym Node.js LTS:

curl -s https://noobs.mikr.us | bash
sudo /opt/noobs/scripts/chce_nvm.sh

Po instalacji wyloguj się i zaloguj ponownie. Albo, jeśli nie chce Ci się rozłączać, doładuj NVM w bieżącej sesji:

source ~/.nvm/nvm.sh

Przy kolejnych logowaniach nic już nie musisz robić, bo skrypt sam dopisuje ładowanie NVM do .bashrc/.profile.

Na dowolnym serwerze (Ubuntu/Debian)#

Wersja ręczna. Na Mikrusie działa tak samo jak na każdym innym VPS-ie:

sudo apt update
sudo apt install -y git
git clone https://github.com/nvm-sh/nvm.git ~/.nvm
cd ~/.nvm
git checkout $(git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1))

Ta dość upiorna ostatnia linijka przełącza po prostu repozytorium na najnowsze oficjalne wydanie NVM.

Teraz automatyczne ładowanie w .bashrc:

cat >> ~/.bashrc << 'EOF'

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
EOF
source ~/.bashrc

I instalacja najnowszego LTS (Long Term Support, czyli wersji zalecanej na produkcję):

nvm install -b --lts --latest-npm --default

Zwróć uwagę na -b, bo to najważniejsza flaga w tym poradniku. Wymusza instalację z gotowej binarki. Bez niej NVM, gdy nie znajdzie binarki pasującej do Twojej architektury, potrafi zabrać się za kompilowanie Node.js ze źródeł. A to proces tak pamięciożerny, że na typowym Mikrusie kończy się natychmiastowym OOM-em. Dlatego: zawsze z -b.

Instalacja konkretnej wersji#

Projekt upiera się przy konkretnej wersji, powiedzmy Node 20? Zamiast --lts podajesz numer:

nvm install -b 20

Przełączanie między wersjami#

Co masz zainstalowane:

nvm ls

Przełączenie w bieżącej sesji:

nvm use 20

Ustawienie wersji domyślnej#

nvm use działa tylko do końca bieżącej sesji. Zalogujesz się ponownie i wraca wersja domyślna. Jeśli chcesz zmienić, która wersja ładuje się na starcie:

nvm alias default 20

Najczęstsze błędy#

nvm: command not found tuż po instalacji. NVM nie załadował się jeszcze w tej sesji. source ~/.nvm/nvm.sh albo ponowne logowanie i po kłopocie.

Instalacja stoi w miejscu i pożera całą pamięć. Zapomniane -b, patrz wyżej. Ctrl+C i jeszcze raz, tym razem z flagą.

npm install używa nie tej wersji Node, co trzeba. Sprawdź node -v w katalogu projektu. Jeżeli projekt ma plik .nvmrc, wystarczy w tym katalogu odpalić nvm use bez argumentów i NVM sam dobierze właściwą wersję.