OverObsessed

Versioni multiple di node con nvm

Dev: Lucaaa!? Il progetto non va.. me spara un errore assurdo! Luca: hai la versione di node corretta per il progetto a cui stai lavorando? Dev: ma che ne so io ho quella che ho sempre.. Luca: hai lanciato nvm use?

Questo è un discorso che è capitato spesso nel corso della mia carriera lavorativa.

Lavorare con tanti progetti node diversi, con più maintainer diversi, porta facilmente ad una frammentazione delle versioni di node, per questo motivo esistono degli strumenti chiamati “version manager” che permettono di gestire più versioni dello stesso linguaggio nella stessa macchina.

Il mio setup

Io personalmente sfrutto nvm per:

  1. Gestire più versioni di node allo stesso tempo: nvm permette di passare facilmente tra diverse versioni di Node
  2. Automatizzare le versioni di node nella CI / CD:
  3. Cambiare automaticamente la versione di node accedendo ad un progetto da terminale: Con NVM, posso configurare i miei ambienti di sviluppo in modo che la versione di Node si aggiorni automaticamente quando passo da un progetto all’altro.

Installare nvm

Come PRIMISSIMA cosa installare nvm, non installare node globalmente nel modo classico.

Basta andare sul repository e prendersi la cURL da lanciare nel terminale, seguendo eventuali istruzioni.

Installare la versione di Node di default

nvm ti gestisce automaticamente una lista indefinita di versioni di Node, e la prima versione che installerai sarà quella di default (finché non vorrai cambiarla in futuro con un comando apposito).

Ti basterà lanciare:

nvm install lts/*

Per ottenere l’ultima versione LTS di Node disponibile!

Utilizzare l’.nvmrc file nei tuoi progetti

A questo punto ti basterà dichiarare la versione usata in un dato progetto all’interno dell’.nvmrc, qui puoi metterci qualsiasi notazione supportata da nvm.

Questo è super comodo per evitare di ricordarsi la versione di ogni progetto

Script per automatizzare la gestione di node

autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)" # nvm_find_nvmrc its a binary shipped with nvm

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

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc # chpwd is a zsh hook that fires when the current working directory changes
load-nvmrc