nodemon este un instrument care ajută la dezvoltarea aplicațiilor bazate pe node.js prin repornirea automată a aplicației node atunci când sunt detectate modificări ale fișierelor din director.

nodemon nu necesită modificări suplimentare ale codului sau ale metodei de dezvoltare. nodemon este un wrapper de înlocuire pentru node. Pentru a utiliza nodemon, înlocuiți cuvântul node în linia de comandă atunci când executați scriptul dumneavoastră.

Instalare

Fie prin clonare cu git sau prin utilizarea npm (metoda recomandată):

npm install -g nodemon

Și nodemon va fi instalat global în calea sistemului dumneavoastră.

De asemenea, puteți instala nodemon ca dependență de dezvoltare:

npm install --save-dev nodemon

Cu o instalare locală, nodemon nu va fi disponibil în calea dvs. de sistem. În schimb, instalarea locală a nodemon poate fi rulată prin apelarea acestuia din cadrul unui script npm (cum ar fi npm start) sau folosind npx nodemon.

Utilizare

nodemon vă înfășoară aplicația, astfel încât puteți trece toate argumentele pe care le-ați trece în mod normal aplicației dumneavoastră:

nodemon 

Pentru opțiunile CLI, utilizați argumentul -h (sau --help):

nodemon -h

Utilizarea nodemonului este simplă, dacă aplicația mea ar accepta o gazdă și un port ca argumente, aș porni-o astfel:

nodemon ./server.js localhost 8080

Toată ieșirea din acest script este prefixată cu , în caz contrar toate ieșirile din aplicația dumneavoastră, inclusiv erorile, vor fi redate conform așteptărilor.

Dacă nu este dat niciun script, nodemon va testa dacă există un fișier package.json și, dacă este găsit, va rula fișierul asociat cu proprietatea principală (ref).

De asemenea, puteți transmite steagul inspect către nodemon prin linia de comandă, așa cum ați face-o în mod normal:

nodemon --inspect ./server.js 80

Dacă aveți un fișier package.json pentru aplicația dumneavoastră, puteți omite complet scriptul principal și nodemon va citi package.json pentru proprietatea main și va folosi acea valoare ca aplicație.

nodemon va căuta, de asemenea, proprietatea scripts.start în package.json (începând cu nodemon 1.1.x).

De asemenea, consultați FAQ sau problemele pentru nodemon.

Reexecutarea automată

nodemon a fost scris inițial pentru a reporni procesele suspendate, cum ar fi serverele web, dar acum suportă aplicațiile care ies în mod curat. Dacă scriptul dvs. iese curat, nodemon va continua să monitorizeze directorul (sau directoarele) și va reporni scriptul în cazul în care există modificări.

Repornire manuală

În timp ce nodemon rulează, dacă aveți nevoie să vă reporniți manual aplicația, în loc să opriți și să reporniți nodemon, puteți tasta rs cu revenire la cărămidă, iar nodemon vă va reporni procesul.

Fișiere de configurare

nodemon acceptă fișiere de configurare locale și globale. Acestea se numesc de obicei nodemon.json și pot fi localizate în directorul de lucru curent sau în directorul dvs. personal. Un fișier de configurare local alternativ poate fi specificat cu opțiunea --config <file>.

Specificitatea este următoarea, astfel încât un argument din linia de comandă va anula întotdeauna setările din fișierul de configurare:

  • argumente din linia de comandă
  • configurare locală
  • configurare globală

Un fișier de configurare poate lua oricare dintre argumentele din linia de comandă ca valori cheie JSON, de exemplu:

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

Filierul nodemon.json de mai sus ar putea fi configurația mea globală, astfel încât să am suport pentru fișiere ruby și fișiere de procesare, iar eu pot rula nodemon demo.pde și nodemon va ști automat cum să ruleze scriptul, chiar dacă din start suportă scripturile de procesare.

Un alt exemplu de opțiuni poate fi văzut în sample-nodemon.md

package.json

Dacă doriți să păstrați toate configurațiile pachetelor într-un singur loc, nodemon acceptă utilizarea package.json pentru configurare.Specificați configurația în același format ca și în cazul unui fișier de configurare, dar sub nodemonConfig în fișierul package.json, de exemplu, luați următorul package.json:

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

Rețineți că dacă specificați un fișier --config sau furnizați un nodemon.json local, orice configurație package.json este ignorată.

Această secțiune are nevoie de o documentație mai bună, dar deocamdată puteți vedea și nodemon --help config (tot aici).

Utilizarea nodemonului ca modul

Vă rugăm să consultați doc/requireable.md

Utilizarea nodemonului ca proces copil

Vă rugăm să consultați doc/events.md

Rularea de scripturi care nu fac parte din nod

nodemon poate fi, de asemenea, utilizat pentru a executa și monitoriza alte programe. nodemon va citi extensia de fișier a scriptului care se execută și va monitoriza această extensie în loc de .js dacă nu există nodemon.json:

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

Acum nodemon va rula app.py cu python în modul verbose (rețineți că, dacă nu treceți argi la programul de execuție, nu aveți nevoie de ghilimele) și va căuta fișiere noi sau modificate cu extensia .py.

Executabile implicite

Utilizând fișierul de configurare nodemon.json, puteți să vă definiți propriile executabile implicite folosind proprietatea execMap. Acest lucru este deosebit de util dacă lucrați cu un limbaj care nu este suportat în mod implicit de nodemon.

Pentru a adăuga suport pentru ca nodemon să știe despre extensia .pl (pentru Perl), fișierul nodemon.json ar trebui să adauge:

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

Acum rulând următoarele, nodemon va ști să folosească perl ca executabil:

nodemon script.pl

În general, este recomandat să folosiți fișierul global nodemon.json pentru a adăuga propriile opțiuni execMap. Cu toate acestea, dacă există o opțiune implicită comună care lipsește, aceasta poate fi încorporată în proiect astfel încât nodemon să o suporte în mod implicit, modificând default.js și trimițând o cerere de tip pull request.

Monitorizarea mai multor directoare

În mod implicit nodemon monitorizează directorul de lucru curent. Dacă doriți să preluați controlul asupra acestei opțiuni, folosiți opțiunea --watch pentru a adăuga căi specifice:

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

Acum nodemon va reporni doar dacă există modificări în directorul ./app sau ./libs. În mod implicit, nodemon va traversa subdirectoarele, deci nu este nevoie să includeți în mod explicit subdirectoare.

Nu folosiți globbing unix pentru a trece mai multe directoare, de exemplu --watch ./lib/*, nu va funcționa. Aveți nevoie de un steguleț --watch pentru fiecare director supravegheat.

Specificarea listei de supraveghere a extensiilor

nodemon -e js,pug

Acum nodemon va reporni la orice modificare a fișierelor din director (sau subdirectoare) cu extensiile .js, .pug.

Ignorarea fișierelor

În mod implicit, nodemon va reporni numai atunci când se modifică un fișier .js JavaScript. În unele cazuri, veți dori să ignorați anumite fișiere, directoare sau modele de fișiere specifice, pentru a împiedica nodemon să repornească prematur aplicația dvs.

Acest lucru se poate face prin intermediul liniei de comandă:

nodemon --ignore lib/ --ignore tests/

Orice fișiere specifice pot fi ignorate:

nodemon --ignore lib/app.js

Patronii pot fi, de asemenea, ignorați (dar asigurați-vă că citați argumentele):

nodemon --ignore 'lib/*.js'

Rețineți că, în mod implicit, nodemon va ignora directoarele .git, node_modules, bower_components, .nyc_output, coverage și .sass-cache și va adăuga modelele dvs. ignorate la listă. Dacă doriți să urmăriți într-adevăr un director cum ar fi node_modules, trebuie să suprascrieți regulile de ignorare implicite subiacente.

Aplicația nu se repornește

În unele medii în rețea (cum ar fi un container care rulează nodemon care citește pe o unitate montată), va trebui să utilizați legacyWatch: true care activează interogarea lui Chokidar.

Via CLI, utilizați fie --legacy-watch, fie -L pe scurt:

nodemon -L

Cu toate că aceasta ar trebui să fie o ultimă soluție, deoarece va polua fiecare fișier pe care îl poate găsi.

Amânarea repornirii

În unele situații, este posibil să doriți să așteptați până când un număr de fișiere au fost modificate. Timpul de așteptare înainte de verificarea noilor modificări de fișiere este de 1 secundă. Dacă încărcați un număr de fișiere și durează un anumit număr de secunde, acest lucru ar putea face ca aplicația dvs. să repornească de mai multe ori în mod inutil.

Pentru a adăuga o accelerație suplimentară sau pentru a întârzia repornirea, utilizați comanda --delay:

nodemon --delay 10 server.js

Pentru mai multă precizie, se pot specifica milisecunde. Fie sub formă de float:

nodemon --delay 2.5 server.js

Sau folosind specificatorul de timp (ms):

nodemon --delay 2500ms server.js

Numărul de întârziere este numărul de secunde (sau milisecunde, dacă este specificat) pentru a întârzia înainte de repornire. Astfel, nodemon va reporni aplicația dvs. numai la numărul de secunde dat după ultima modificare de fișier.

Dacă setați această valoare în nodemon.json, valoarea va fi întotdeauna interpretată în milisecunde. De ex, următoarele sunt echivalente:

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

Reîncărcarea grațioasă în jos a scriptului dumneavoastră

Este posibil ca nodemon să trimită orice semnal pe care îl specificați aplicației dumneavoastră.

nodemon --signal SIGHUP server.js

Aplicația dumneavoastră poate gestiona semnalul după cum urmează.

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

Rețineți că nodemon va trimite acest semnal fiecărui proces din arborele de procese.

Dacă folosiți cluster, atunci fiecare workers (precum și masterul) va primi semnalul. Dacă doriți să încheiați toți lucrătorii la primirea unui SIGHUP, un model obișnuit este să prindeți SIGHUP în master și să transmiteți SIGTERM către toți lucrătorii, asigurându-vă în același timp că toți lucrătorii ignoră SIGHUP.

Controlul opririi scriptului dvs.

nodemon trimite un semnal de ucidere aplicației dvs. atunci când vede o actualizare de fișier. Dacă aveți nevoie să curățați la închidere în interiorul scriptului dvs. puteți capta semnalul kill și să vă ocupați singur de el.

Exemplul următor va asculta o singură dată semnalul SIGUSR2 (folosit de nodemon pentru a reporni), va rula procesul de curățare și apoi se va sinucide pentru ca nodemon să continue controlul:

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

Rețineți că process.kill este apelat numai după ce lucrările dvs. de închidere sunt finalizate. Jos pălăria către Benjie Gillam pentru că a scris această tehnică.

Declanșarea evenimentelor atunci când se schimbă starea nodemonului

Dacă doriți notificări de tip growl atunci când nodemon repornește sau pentru a declanșa o acțiune atunci când se întâmplă un eveniment, atunci puteți fie require nodemon, fie adăuga acțiuni de eveniment la fișierul nodemon.json.

De exemplu, pentru a declanșa o notificare pe un Mac atunci când nodemon repornește, nodemon.json arată astfel:

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

O listă completă a evenimentelor disponibile este listată pe wiki-ul event states. Rețineți că vă puteți lega atât la stări, cât și la mesaje.

Pipe output to somewhere else

Utilizarea nodemon în fluxul de lucru gulp

Verificați pluginul gulp-nodemon pentru a integra nodemon cu restul fluxului de lucru gulp al proiectului dumneavoastră.

Utilizarea nodemon în fluxul de lucru Grunt

Verificați plugin-ul grunt-nodemon pentru a integra nodemon cu restul fluxului de lucru grunt al proiectului dumneavoastră.

Pronunție

nodemon, se pronunță: node-mon, no-demon sau node-e-mon (ca pokémon)?

Bine… am mai fost întrebat de multe ori acest lucru. Îmi place că am fost întrebat asta înainte. Au existat pariuri cu privire la care dintre ele este de fapt.

Răspunsul este simplu, dar posibil frustrant. Nu spun (cum se pronunță). Rămâne la latitudinea dumneavoastră să o numiți cum doriți. Toate răspunsurile sunt corecte 🙂

Principii de proiectare

  • Mai puține stegulețe sunt mai bune
  • Funcționează pe toate platformele
  • Mai puține caracteristici
  • Lasă indivizii să construiască pe nodemon
  • Oferiți toate funcționalitățile CLI sub formă de API
  • Contribuțiile trebuie să aibă și să treacă testele

Nodemon nu este perfect, iar argumentele CLI s-au întins dincolo de punctul în care sunt complet mulțumit, dar poate că într-o zi poate fi redus puțin.

FAQ

Vezi FAQ și te rugăm să adaugi propriile întrebări dacă crezi că ar putea ajuta pe alții.

Susținători

Mulțumim tuturor susținătorilor noștri! 🙏

Sponsori

Susțineți acest proiect devenind un sponsor. Logo-ul tău va apărea aici cu un link către site-ul tău. Sponsorizați acest proiect astăzi ❤️

Licență

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

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.