nvm

Installare Node.js è un’attività semplice: basta andare nella pagina Download del progetto e scaricare un pacchetto precompilato per il nostro sistema operativo. Esiste un metodo ancora più semplice per installare Node.js, ed è quello basato su nvm, un gestore di versioni di Node.js. Grazie a nvm una nuova versione di Node.js può essere installata con i tre comandi qui sotto.

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

nvm install 20

node -v
  • (riga 1) installate un gestore delle versioni di Node.js (in questo caso nvm, ma ne esistono anche altri)
  • (riga 2) installate la versione 20 di Node.js (l’ultima disponibile per quella serie)
  • (riga 3) lanciate Node.js facendo stampare la sua versione: è tutto pronto per sviluppare

Questo strumento permette di fare molto di più della semplice installazione di Node.js. Per questo motivo ho dedicato un intero capitolo (il 2) del libro su Node.js alla spiegazione di come gestire le versioni, capire il loro significato (pari VS dispari) e come passare da una all’altra senza mal di testa.

Infatti grazie a nvm potete passare da una versione all’altra di Node.js usando, per esempio, il comando nvm use 22. Tutte le versioni che installerete attrevero nvm non andranno in conflitto fra loro. Saper usare uno strumento come questo ci permette di lavorare nella massima tranquillità a più progetti, anche sviluppati per versioni diverse di Node.js: per passare da una versione all’altra basta un comando.

Automatizzare nvm

nvm è implementato come una serie di script bash (POSIX) e non ha bisogno di un compilatore o un binario per funzionare. Per questo motivo, oltre ad essere semplice da installare, è anche facile da configurare e adattare alla vostre esigenze. Per esempio, se usate la shell zsh potete aggiungere questo script nel vostro file .zshrc per fare in modo che nvm passi in automatico alla versione di Node.js descritta nei file .nvmrc che si trovano all’interno dei progetti.

# place this after nvm initialization!
autoload -U add-zsh-hook

load-nvmrc() {
  local nvmrc_path
  nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version
    nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
      nvm use
    fi
  elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}

add-zsh-hook chpwd load-nvmrc
load-nvmrc

Quindi, non appena si esegue cd my-node-project, se lo script troverà il file .nvmrc farà partire nvm per passare alla versione indicata. Inoltre, se questa non è presente localmente, sarà anche installata in automatico. Potete trovare il codice per le altre shell nel README del progetto.

Altri gestori di versioni di Node.js

Nuovi gestori delle versioni di Node.js escono in continuazione:

C’è l’imbarazzo della scelta e ognuno ha le sue particolarità.

Perché usare nvm

Le alternative a nvm sono molte e tutte proclamano di essere le migliori. La differenza, però, è sempre nei dettagli, come il supporto alla gestione delle versioni dei package manager in Volta.

Nella documentazione viene detto che la funzionalità è supportata ma su Github non sembra essere così. Non è chiaro poi perché voler usare uno strumento esterno quando la stessa funzionalità viene offerta da Node.js stesso attraverso Corepack (ancora experimental però).

La OpenJS foundation e Node.js

Un altro motivo, da non sottovalutare, è che nvm è supportato direttamente dalla OpenJS Foundation e che è lo strumento usato dal team di Node.js anche per la gestione dei test.