nodemon è uno strumento che aiuta a sviluppare applicazioni basate su node.js riavviando automaticamente l’applicazione node quando vengono rilevati cambiamenti di file nella directory.

nodemon non richiede alcuna modifica aggiuntiva al tuo codice o metodo di sviluppo. nodemon è un wrapper di sostituzione per node. Per usare nodemon, sostituisci la parola node sulla linea di comando quando esegui il tuo script.

Installazione

Oppure attraverso la clonazione con git o usando npm (il modo consigliato):

npm install -g nodemon

E nodemon sarà installato globalmente nel tuo percorso di sistema.

Puoi anche installare nodemon come dipendenza di sviluppo:

npm install --save-dev nodemon

Con un’installazione locale, nodemon non sarà disponibile nel tuo percorso di sistema. Invece, l’installazione locale di nodemon può essere eseguita chiamandola dall’interno di uno script npm (come npm start) o usando npx nodemon.

Uso

nodemon avvolge la tua applicazione, quindi puoi passare tutti gli argomenti che passeresti normalmente alla tua applicazione:

nodemon 

Per le opzioni CLI, usa l’argomento -h (o --help):

nodemon -h

Utilizzare nodemon è semplice, se la mia applicazione accettasse un host e una porta come argomenti, la avvierei così:

nodemon ./server.js localhost 8080

Tutti gli output di questo script hanno il prefisso , altrimenti tutti gli output della tua applicazione, errori inclusi, saranno echoed out come previsto.

Se non viene dato alcuno script, nodemon cercherà un file package.json e, se trovato, eseguirà il file associato alla proprietà principale (ref).

Puoi anche passare il flag inspect a node attraverso la linea di comando come faresti normalmente:

nodemon --inspect ./server.js 80

Se hai un file package.json per la tua app, puoi omettere completamente lo script principale e nodemon leggerà il package.json per la proprietà main e userà quel valore come app.

nodemon cercherà anche la proprietà scripts.start in package.json (a partire da nodemon 1.1.x).

Controlla anche le FAQ o i problemi di nodemon.

Riavvio automatico

nodemon è stato originariamente scritto per riavviare processi sospesi come i server web, ma ora supporta le applicazioni che escono in modo pulito. Se il tuo script esce in modo pulito, nodemon continuerà a monitorare la directory (o le directory) e riavvierà lo script se ci sono dei cambiamenti.

Riavvio manuale

Mentre nodemon è in esecuzione, se hai bisogno di riavviare manualmente la tua applicazione, invece di fermare e riavviare nodemon, puoi digitare rs con un ritorno a capo, e nodemon riavvierà il tuo processo.

File di configurazione

nodemon supporta file di configurazione locali e globali. Questi sono di solito nominati nodemon.json e possono essere situati nella directory di lavoro corrente o nella propria home directory. Un file di configurazione locale alternativo può essere specificato con l’opzione --config <file>.

La specificità è la seguente, in modo che un argomento della linea di comando sovrascriva sempre le impostazioni del file di configurazione:

  • argomenti della linea di comando
  • configurazione locale
  • configurazione globale

Un file di configurazione può prendere qualsiasi argomento della linea di comando come valori chiave JSON, per esempio:

{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}

Il file nodemon.json di cui sopra potrebbe essere il mio config globale in modo da avere il supporto per i file ruby e i file di elaborazione, e posso eseguire nodemon demo.pde e nodemon saprà automaticamente come eseguire lo script anche se fuori dalla scatola il supporto per gli script di elaborazione.

Un ulteriore esempio di opzioni può essere visto in sample-nodemon.md

package.json

Se vuoi tenere tutte le configurazioni del tuo pacchetto in un unico posto, nodemon supporta l’uso di package.json per la configurazione.Specifica la configurazione nello stesso formato che useresti per un file di configurazione ma sotto nodemonConfig nel file package.json, per esempio, prendi il seguente package.json:

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

Nota che se specifichi un file --config o fornisci un nodemon.json locale qualsiasi configurazione package.json viene ignorata.

Questa sezione ha bisogno di una migliore documentazione, ma per ora puoi anche vedere nodemon --help config (anche qui).

Usare nodemon come modulo

Si veda doc/requireable.md

Usare nodemon come processo figlio

Si veda doc/events.md

Esecuzione di script non-node

nodemon può anche essere usato per eseguire e monitorare altri programmi. nodemon leggerà l’estensione del file dello script in esecuzione e monitorerà quell’estensione invece di .js se non c’è nodemon.json:

nodemon --exec "python -v" ./app.py

Ora nodemon eseguirà app.py con python in modalità verbose (nota che se non stai passando args al programma exec, non hai bisogno degli apici), e cercherà file nuovi o modificati con estensione .py.

Eseguibili di default

Utilizzando il file di configurazione nodemon.json, puoi definire i tuoi eseguibili di default usando la proprietà execMap. Questo è particolarmente utile se stai lavorando con un linguaggio che non è supportato di default da nodemon.

Per aggiungere il supporto affinché nodemon conosca l’estensione .pl (per Perl), il file nodemon.json dovrebbe aggiungere:

{ "execMap": { "pl": "perl" }}

Ora eseguendo quanto segue, nodemon saprà usare perl come eseguibile:

nodemon script.pl

In genere si raccomanda di usare il globale nodemon.json per aggiungere le proprie opzioni execMap. Tuttavia, se c’è un default comune che manca, questo può essere unito al progetto in modo che nodemon lo supporti di default, cambiando default.js e inviando una richiesta di pull.

Monitoraggio di directory multiple

Di default nodemon controlla la directory di lavoro corrente. Se vuoi prendere il controllo di questa opzione, usa l’opzione --watch per aggiungere percorsi specifici:

nodemon --watch app --watch libs app/server.js

Ora nodemon si riavvia solo se ci sono cambiamenti nella directory ./app o ./libs. Per impostazione predefinita nodemon attraverserà le sottodirectory, quindi non c’è bisogno di includere esplicitamente le sottodirectory.

Non usare unix globbing per passare directory multiple, ad esempio --watch ./lib/*, non funzionerà. Hai bisogno di un flag --watch per ogni directory controllata.

Specificare la lista di controllo delle estensioni

nodemon -e js,pug

Ora nodemon si riavvierà ad ogni cambiamento dei file nella directory (o sottodirectory) con le estensioni .js, .pug.

Ignorando i file

Di default, nodemon si riavvia solo quando cambia un file .js JavaScript. In alcuni casi vorrete ignorare alcuni specifici file, directory o modelli di file, per evitare che nodemon riavvii prematuramente la vostra applicazione.

Questo può essere fatto tramite la linea di comando:

nodemon --ignore lib/ --ignore tests/

Oppure file specifici possono essere ignorati:

nodemon --ignore lib/app.js

Anche i modelli possono essere ignorati (ma assicurati di citare gli argomenti):

nodemon --ignore 'lib/*.js'

Nota che per default, nodemon ignorerà le directory .git, node_modules, bower_components, .nyc_output, coverage e .sass-cache e aggiungerà i tuoi modelli ignorati alla lista. Se vuoi davvero guardare una directory come node_modules, devi sovrascrivere le sottostanti regole di ignoramento predefinite.

L’applicazione non si riavvia

In alcuni ambienti di rete (come un contenitore che esegue nodemon che legge attraverso un drive montato), dovrai usare il legacyWatch: true che abilita il polling di Chokidar.

Via CLI, usa --legacy-watch o -L per abbreviare:

nodemon -L

Anche se questa dovrebbe essere l’ultima risorsa, dato che farà il polling di ogni file che riesce a trovare.

Ritardare il riavvio

In alcune situazioni, potresti voler aspettare finché un certo numero di file è cambiato. Il timeout prima di controllare i cambiamenti di nuovi file è di 1 secondo. Se stai caricando un certo numero di file e ci vuole un certo numero di secondi, questo potrebbe far sì che la tua applicazione si riavvii più volte inutilmente.

Per aggiungere un extra throttle, o ritardare il riavvio, usa il comando --delay:

nodemon --delay 10 server.js

Per una maggiore precisione, possono essere specificati i millisecondi. Sia come float:

nodemon --delay 2.5 server.js

O usando lo specificatore di tempo (ms):

nodemon --delay 2500ms server.js

La cifra del ritardo è il numero di secondi (o millisecondi, se specificato) di ritardo prima del riavvio. Quindi nodemon riavvierà la tua applicazione solo il numero di secondi dato dopo l’ultimo cambiamento di file.

Se stai impostando questo valore in nodemon.json, il valore sarà sempre interpretato in millisecondi. Per esempio, i seguenti sono equivalenti:

nodemon --delay 2.5{ "delay": "2500"}

Ricarica con grazia il tuo script

È possibile far inviare a nodemon qualsiasi segnale che specifichi alla tua applicazione.

nodemon --signal SIGHUP server.js

La tua applicazione può gestire il segnale come segue.

process.once("SIGHUP", function () { reloadSomeConfiguration();})

Nota che nodemon invierà questo segnale ad ogni processo nell’albero dei processi.

Se stai usando cluster, allora ogni lavoratore (così come il master) riceverà il segnale. Se si desidera terminare tutti i lavoratori alla ricezione di un SIGHUP, uno schema comune è quello di catturare il SIGHUP nel master, e inoltrare SIGTERM a tutti i lavoratori, assicurandosi che tutti i lavoratori ignorino il SIGHUP.

Controllo dello spegnimento del tuo script

nodemon invia un segnale di uccisione alla tua applicazione quando vede un aggiornamento del file. Se hai bisogno di pulire allo spegnimento all’interno del tuo script puoi catturare il segnale di kill e gestirlo tu stesso.

L’esempio seguente ascolterà una volta il segnale SIGUSR2 (usato da nodemon per riavviare), eseguirà il processo di pulizia e poi si ucciderà per permettere a nodemon di continuare il controllo:

process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});

Nota che il process.kill viene chiamato solo una volta che il tuo lavoro di spegnimento è completo. Hat tip a Benjie Gillam per aver scritto questa tecnica.

Innescare eventi quando lo stato di nodemon cambia

Se vuoi delle notifiche tipo growl quando nodemon si riavvia o innescare un’azione quando accade un evento, allora puoi require nodemon o aggiungere azioni evento al tuo file nodemon.json.

Per esempio, per innescare una notifica su un Mac quando nodemon si riavvia, nodemon.json si presenta così:

{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}

Un elenco completo degli eventi disponibili è elencato sul wiki degli stati degli eventi. Si noti che è possibile legarsi sia agli stati che ai messaggi.

Pipe output to somewhere else

Using nodemon in your gulp workflow

Consulta il plugin gulp-nodemon per integrare nodemon con il resto del flusso di lavoro gulp del tuo progetto.

Usare nodemon nel flusso di lavoro Grunt

Scoprite il plugin grunt-nodemon per integrare nodemon con il resto del flusso di lavoro grunt del vostro progetto.

Pronuncia

nodemon, si pronuncia: node-mon, no-demon o node-e-mon (come pokémon)?

Bene… mi è stato chiesto molte volte prima. Mi piace che mi sia stato chiesto prima. Ci sono state scommesse su quale sia effettivamente.

La risposta è semplice, ma forse frustrante. Non sto dicendo (come lo pronuncio). Sta a voi chiamarlo come volete. Tutte le risposte sono corrette:)

Principi di progettazione

  • Meno bandiere è meglio
  • Funziona su tutte le piattaforme
  • Meno caratteristiche
  • Lascia che gli individui costruire sopra nodemon
  • Offrire tutte le funzionalità del CLI come API
  • I contributi devono avere e passare i test

Nodemon non è perfetto, e gli argomenti della CLI si sono estesi oltre il punto in cui sono completamente felice, ma forse un giorno potrà essere ridotto un po’.

FAQ

Guarda le FAQ e per favore aggiungi le tue domande se pensi che possano aiutare gli altri.

Sostenitori

Grazie a tutti i nostri sostenitori! 🙏

Sostenete questo progetto diventando uno sponsor. Il tuo logo apparirà qui con un link al tuo sito web. Sponsorizza questo progetto oggi ❤️

Licenza

MIT http://rem.mit-license.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.