Skip to content

Gestione Versioni Node.js

fnm fornisce potenti funzionalità di gestione versioni, permettendoti di cambiare facilmente tra più versioni di Node.js.

Operazioni Base

Visualizza Versioni Installate

bash
fnm list

Esempio output:

* v20.10.0 default
  v18.19.0
  v16.20.2
  • * indica la versione attualmente in uso
  • default indica la versione predefinita

Visualizza Versione Corrente

bash
fnm current

Cambia Versione

bash
# Cambia a versione specifica
fnm use 20

# Cambia a versione esatta specifica
fnm use 20.10.0

# Se versione non è installata, installa automaticamente poi cambia
fnm use 18 --install-if-missing

Versione Predefinita

Imposta Versione Predefinita

bash
fnm default 20

La versione predefinita è:

  • La versione usata quando si avvia una nuova sessione terminale
  • La versione usata quando non c'è file versione

Visualizza Versione Predefinita

bash
fnm default

Alias Versione

Gli alias permettono di impostare nomi facili da ricordare per le versioni.

Crea Alias

bash
# Imposta alias per versione
fnm alias 20 default
fnm alias 18 legacy
fnm alias 16 old

Usa Alias

bash
# Cambia versione tramite alias
fnm use default
fnm use legacy

Elimina Alias

bash
fnm unalias legacy

Cambio Automatico Versione

fnm può cambiare automaticamente le versioni di Node.js in base alla directory del progetto.

Abilita Cambio Automatico

Aggiungi --use-on-cd alla configurazione Shell:

bash
eval "$(fnm env --use-on-cd)"

Crea File Versione

Crea un file .node-version o .nvmrc nella directory radice del progetto:

bash
# Usando .node-version (consigliato)
echo "20" > .node-version

# O usando .nvmrc (compatibile con nvm)
echo "v18.17.0" > .nvmrc

Formato File Versione

.node-version supporta i seguenti formati:

20           # Versione principale, usa ultima 20.x.x
20.10        # Versione minor, usa ultima 20.10.x
20.10.0      # Versione esatta
lts/iron     # Nome versione LTS

Strategia Parsing File Versione

fnm supporta due strategie di parsing file versione:

bash
# local (predefinito) - Cerca solo nella directory corrente
fnm env --version-file-strategy=local

# recursive - Cerca ricorsivamente nelle directory parent
fnm env --version-file-strategy=recursive

Supporto package.json engines

fnm può leggere il campo engines.node da package.json:

json
{
  "engines": {
    "node": ">=18.0.0"
  }
}

Abilitato per impostazione predefinita, può essere disabilitato tramite variabile ambiente:

bash
export FNM_RESOLVE_ENGINES=false

Best Practice Gestione Versioni

1. Blocco Versione a Livello Progetto

Crea un file .node-version in ogni progetto:

bash
cd my-project
echo "20" > .node-version
fnm install
fnm use

2. Collaborazione Team

Aggiungi .node-version a Git:

bash
git add .node-version
git commit -m "chore: add .node-version"

3. Configurazione CI/CD

Usa fnm in ambienti CI/CD:

yaml
# GitHub Actions
- name: Installa fnm
  run: curl -fsSL https://fnm.vercel.app/install | bash

- name: Installa Node.js
  run: fnm install && fnm use

4. Sviluppo Multi-Versione

bash
# Installa più versioni
fnm install 20
fnm install 18
fnm install 16

# Imposta alias per cambio facile
fnm alias 20 current
fnm alias 18 legacy
fnm alias 16 old

# Usa versioni diverse in progetti diversi
cd project-new && fnm use current
cd project-old && fnm use legacy

Disinstalla Versioni

bash
# Disinstalla versione specifica
fnm uninstall 16.20.2

# Disinstalla tramite alias (elimina versione e tutti gli alias correlati)
fnm uninstall old

Problemi Comuni

Comando node Non Si Aggiorna Dopo Cambio Versione

Assicurati che la configurazione Shell sia corretta:

bash
# Controlla percorso node
which node

# Dovrebbe puntare alla directory fnm
# ~/.fnm/node-versions/.../bin/node

Cambio Automatico Non Funziona

  1. Conferma che --use-on-cd è aggiunto alla configurazione Shell
  2. Conferma che il file versione esiste
  3. Ricarica configurazione Shell

Priorità File Versione

fnm cerca le versioni nel seguente ordine:

  1. Versione specificata sulla riga di comando
  2. File .node-version
  3. File .nvmrc
  4. package.json campo engines.node
  5. Versione predefinita