Categorie
Tutorial

Nodemon: riavviare automaticamente le app Node.js

Durante lo sviluppo di un’applicazione con Node.js, può essere stancante riavviare continuamente il processo ogni volta che si effettua un piccolo cambiamento.

Fortunatamente per risolvere questo problema c’è nodemon, uno strumento a riga di comando che ci permette di avviare le applicazioni Node, e quando rileva un cambiamento ad un file, riavvia automaticamente il processo.

Per iniziare ad usare nodemon sarà sufficiente installarlo, globalmente o localmente nella cartella del progetto, utilizzando npm o Yarn.

Installazione

Per installare Nodemon globalmente, puoi usare uno dei seguenti comandi, in base al tuo gestore di pacchetti:

# npm
$ npm install nodemon -g

# yarn
$ yarn global add nodemon

Mentre, se vuoi installare nodemon localmente nella cartella del progetto, scegli tra questi due comandi, sempre in base al tuo gestore di pacchetti:

# npm
npm install nodemon --save-dev

# yarn
yarn add nodemon --dev

Durante l’installazione locale, avrete notato che nel comando è stata specificata l’installazione di nodemon come dipendenza di sviluppo (dev dependency).

Utilizzo di base

Utilizzare nodemon è semplicissimo, proprio come avviare uno script Node. Per esempio, se vogliamo avviare uno script chiamato app.js, ci basterà scrivere questo comando:

$ nodemon app.js

Inoltre, possiamo anche passare parametri, esattamente come facevamo all’avvio con Node:

$ nodemon app.js 3000

Una volta avviato lo script con nodemon, ad ogni cambiamento di un file con una delle estensioni predefinite (.js, .mjs, .json, .coffee, .litcoffee), nella cartella del progetto o in una sottocartella, il processo verrà riavviato:

Come vedete, oltre alle righe aggiunte da nodemon, il processo funzionerà esattamente allo stesso modo.

Potete riavviare il processo in qualsiasi momento scrivendo rs e premendo il tasto Invio.

Alternativamente, nodemon andrà a guardare se nel nostro package.json è specificato un file principale o uno script di avvio. In questi due casi basterà digitare $ nodemon senza nessun parametro per avviare lo script con nodemon.

Utilizzo avanzato

Nonostante nodemon sia molto semplice da utilizzare, sono comunque disponibili altre opzioni, che potete vedere con il comando $ nodemon -h.

Ora ne elencheremo alcune principali e vedremo il loro utilizzo.

Normalmente, nodemon attende 1 secondo prima di riavviare il processo al cambiamento di un file. Con --delay è possibile specificare un ritardo differente. Per esempio con --delay 3 il ritardo sarà di 3 secondi. Si possono anche indicare numeri decimali (es: 3.3).

Nodemon osserva solitamente soltanto la cartella del progetto, ma è possibile aggiungere un --watch per ogni cartelle o file da che si desidera osservare oltre a quella di default.

Se si desidera ignorare delle cartelle o file, si può utilizzare --ignore. Il risultato ottenuto sarà l’opposto di quello del comando watch che abbiamo appena visto.

Per un output più verbose, è possibile aggiungere --verbose per ottenere informazioni sui file che vengono cambiati.

Con --ext è possibile specificare estensioni dei file da osservare diverse da quelle predefinite. Le estensioni, se più di una, devono essere separate con una virgola. Esempio: --ext js, ts.

L’ultima opzione che vedremo è –exec. Essa permette di specificare un binario con cui eseguire il file. Per esempio, combinata con “python -v”, può osservare file Python.

Ecco un esempio in cui stiamo osservando la cartella app per i file con estensione .ts, ignorando i file con il suffisso .test.ts, eseguendo il file con ts-node e impostando il ritardo per il riavvio a 3 secondi.

$ nodemon --watch app --ext ts --exec ts-node --ignore '*.test.ts' --delay 3 app/main.ts

Configurazione

Come abbiamo visto sopra, potrebbe risultare complicato avviare ogni volta nodemon passando tutti i vari parametri di configurazione.

Una soluzione migliore è quella di specificare le configurazioni in un file chiamato nodemon.json. Ecco l’esempio di come potrebbe essere un file di questo tipo:

{
  "verbose": true,
  "ignore": ["*.test.js", "fixtures/*"],
  "execMap": {
    "rb": "ruby",
    "pde": "processing --sketch={{pwd}} --run"
  }
}

Come noterete, al posto di --exec è stato utilizzato execMap. Questo consente di specificare binari che dovrebbero essere utilizzati nel caso di certe estensioni dei file.

Per un file di configurazione più approfondito, potete consultare la documentazione di nodemon.

Se non desiderate creare un file separato, è possibile inserire la configurazione di nodemon all’interno del file package.json, sotto la chiave nodemonConfig:

{
  "name": "nodemon",
  "homepage": "http://nodemon.io",
  "...": "... other standard package.json values",
  "nodemonConfig": {
    "ignore": ["test/*", "docs/*"],
    "delay": "2500"
  }
}

Potete anche utilizzare più file di configurazione, specificandolo all’avvio con --config <file>. In questo caso le configurazione contenute in nodemon.json o in package.json verranno ignorate.

Integrazione con Gulp

Nodem è facilmente integrabile con Gulp, di cui ho parlato in questa breve guida, grazie al plugin gulp-nodemon.

Link utili

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *