nodemon är ett verktyg som hjälper till att utveckla node.js-baserade applikationer genom att automatiskt starta om node-applikationen när filändringar i katalogen upptäcks.

nodemon kräver inga ytterligare ändringar av din kod eller utvecklingsmetod.Nodemon är en ersättande omslagare för node. Om du vill använda nodemon ersätter du ordet node på kommandoraden när du utför ditt skript.

Installation

Endera genom kloning med git eller med hjälp av npm (det rekommenderade sättet):

npm install -g nodemon

Och nodemon kommer att installeras globalt till din systemväg.

Du kan också installera nodemon som ett utvecklingsberoende:

npm install --save-dev nodemon

Med en lokal installation kommer nodemon inte att finnas tillgänglig i din systemväg. Istället kan den lokala installationen av nodemon köras genom att anropa den från ett npm-skript (t.ex. npm start) eller genom att använda npx nodemon.

Användning

nodemon omsluter ditt program, så du kan skicka alla argument som du normalt skulle skicka till ditt program:

nodemon 

För CLI-alternativ använder du argumentet -h (eller --help):

nodemon -h

Användning av nodemon är enkel, om mitt program accepterar en värd och port som argument skulle jag starta det på följande sätt:

nodemon ./server.js localhost 8080

Alla utdata från det här skriptet har prefixet , annars kommer alla utdata från programmet, inklusive fel, att eka ut som förväntat.

Om inget skript anges testar nodemon efter en package.json-fil och om den hittas körs filen som är associerad med huvudegenskapen (ref).

Du kan också skicka inspect-flaggan till nodemon via kommandoraden som du normalt skulle göra:

nodemon --inspect ./server.js 80

Om du har en package.json-fil för din app kan du utelämna huvudskriptet helt och hållet och nodemon kommer att läsa package.json för main-egenskapen och använda det värdet som app.

nodemon kommer också att söka efter scripts.start-egenskapen i package.json (från och med nodemon 1.1.x).

Kontrollera även FAQ eller problemställningar för nodemon.

Automatisk omstart

nodemon skrevs ursprungligen för att starta om hängande processer, t.ex. webbservrar, men har nu stöd för appar som avslutas rent. Om ditt skript avslutas rent kommer nodemon att fortsätta att övervaka katalogen (eller katalogerna) och starta om skriptet om det sker några förändringar.

Manuell omstart

Medans nodemon körs, om du behöver starta om ditt program manuellt, kan du i stället för att stoppa och starta om nodemon skriva rs med en vagnretur, så startar nodemon om din process.

Konfigurationsfiler

nodemon stöder lokala och globala konfigurationsfiler. Dessa heter vanligtvis nodemon.json och kan finnas i den aktuella arbetskatalogen eller i din hemkatalog. En alternativ lokal konfigurationsfil kan anges med alternativet --config <file>.

Specificiteten är följande, så att ett kommandoradsargument alltid åsidosätter inställningarna i konfigurationsfilen:

  • kommandoradsargument
  • lokal config
  • global config

En konfigurationsfil kan ta alla kommandoradsargument som JSON-nyckelvärden, till exempel:

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

Ovanstående nodemon.json-fil kan vara min globala konfigurationsfil så att jag har stöd för ruby-filer och bearbetningsfiler, och jag kan köra nodemon demo.pde och nodemon kommer automatiskt att veta hur skriptet ska köras även om det finns stöd för bearbetningsskript.

Ett ytterligare exempel på alternativ kan ses i sample-nodemon.md

package.json

Om du vill ha alla dina paketkonfigurationer på ett och samma ställe har nodemon stöd för att använda package.json för konfiguration.Ange konfigurationen i samma format som för en konfigurationsfil men under nodemonConfig i package.json-filen, ta till exempel följande package.json:

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

Bemärk att om du anger en --config-fil eller tillhandahåller en lokal nodemon.json ignoreras alla package.json-konfigurationer.

Detta avsnitt behöver bättre dokumentation, men för tillfället kan du även se nodemon --help config (även här).

Användning av nodemon som modul

Se doc/requireable.md

Användning av nodemon som underordnad process

Se doc/events.md

Körning av skript som inte är nodemon

nodemon kan också användas för att exekvera och övervaka andra program. nodemon läser filtillägget för det skript som körs och övervakar det tillägget istället för .js om det inte finns något nodemon.json:

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

Nu kommer nodemon att köra app.py med python i verbose-läge (observera att om du inte skickar args till det exekverade programmet behöver du inte citattecknen), och leta efter nya eller ändrade filer med tillägget .py.

Standardkörbara program

Med hjälp av konfigurationsfilen nodemon.json kan du definiera dina egna standardkörbara program med hjälp av egenskapen execMap. Detta är särskilt användbart om du arbetar med ett språk som inte stöds som standard av nodemon.

För att lägga till stöd för att nodemon ska känna till tillägget .pl (för Perl) skulle nodemon.json-filen innehålla följande:

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

När du kör följande vet nodemon att det ska använda perl som körbar fil:

nodemon script.pl

Det rekommenderas generellt sett att använda den globala nodemon.json för att lägga till dina egna execMap-alternativ. Men om det finns ett vanligt standardalternativ som saknas kan detta läggas in i projektet så att nodemon stöder det som standard, genom att ändra default.js och skicka en pull request.

Övervakning av flera kataloger

Som standard övervakar nodemon den aktuella arbetskatalogen. Om du vill ta kontroll över det alternativet kan du använda alternativet --watch för att lägga till specifika sökvägar:

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

Nu startar nodemon endast om det sker ändringar i katalogen ./app eller ./libs. Som standard kommer nodemon att gå igenom underkataloger, så det finns ingen anledning att uttryckligen inkludera underkataloger.

Använd inte unix globbing för att skicka flera kataloger, t.ex. --watch ./lib/*, det kommer inte att fungera. Du behöver en --watch-flagga per katalog som bevakas.

Specificering av bevakningslista för tillägg

nodemon -e js,pug

Nu startar nodemon om vid alla ändringar av filer i katalogen (eller underkataloger) med tillägg .js, .pug.

Ignorera filer

Som standard startar nodemon om endast när en .js JavaScript-fil ändras. I vissa fall vill du ignorera vissa specifika filer, kataloger eller filmönster för att förhindra att nodemon startar om programmet i förtid.

Detta kan göras via kommandoraden:

nodemon --ignore lib/ --ignore tests/

Och specifika filer kan ignoreras:

nodemon --ignore lib/app.js

Mönster kan också ignoreras (men se till att citera argumenten):

nodemon --ignore 'lib/*.js'

Notera att nodemon som standard ignorerar katalogerna .git, node_modules, bower_components, .nyc_output, coverage och .sass-cache och lägger till dina ignorerade mönster i listan. Om du verkligen vill bevaka en katalog som node_modules måste du åsidosätta de underliggande standardreglerna för ignorering.

Programmet startas inte om

I vissa nätverksmiljöer (t.ex. en behållare som kör nodemon och läser över en monterad enhet) måste du använda legacyWatch: true som aktiverar Chokidars polling.

Via CLI använder du antingen --legacy-watch eller -L i korthet:

nodemon -L

Det här bör dock vara en sista utväg eftersom den kommer att pejla varje fil som den kan hitta.

Fördröjning av omstart

I vissa situationer kanske du vill vänta tills ett antal filer har ändrats. Timeout innan du kontrollerar om nya filändringar är 1 sekund. Om du laddar upp ett antal filer och det tar ett visst antal sekunder kan detta leda till att din app startar om flera gånger i onödan.

För att lägga till en extra throttle, eller fördröja omstarten, kan du använda kommandot --delay:

nodemon --delay 10 server.js

För mer precision kan millisekunder anges. Antingen som ett float:

nodemon --delay 2.5 server.js

Och med tidsangivelsen (ms):

nodemon --delay 2500ms server.js

Fördröjningssiffran är antalet sekunder (eller millisekunder, om det anges) som ska fördröjas innan omstart. Så nodemon kommer bara att starta om din app det angivna antalet sekunder efter den senaste filändringen.

Om du ställer in det här värdet i nodemon.json kommer värdet alltid att tolkas i millisekunder. T.ex, följande är likvärdiga:

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

Graciöst omladdning ner ditt skript

Det är möjligt att låta nodemon skicka vilken signal som helst som du anger till ditt program.

nodemon --signal SIGHUP server.js

Ditt program kan hantera signalen på följande sätt.

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

Bemärk att nodemon kommer att skicka denna signal till varje process i processträdet.

Om du använder cluster kommer varje arbetare (samt master) att ta emot signalen. Om du vill avsluta alla arbetare när du får en SIGHUP är ett vanligt mönster att fånga upp SIGHUP i master och vidarebefordra SIGTERM till alla arbetare, samtidigt som du ser till att alla arbetare ignorerar SIGHUP.

Kontrollera avstängningen av ditt skript

nodemon skickar en kill-signal till ditt program när det ser en filuppdatering. Om du behöver städa upp vid avstängning inuti ditt skript kan du fånga upp kill-signalen och hantera den själv.

Följande exempel kommer att lyssna en gång på SIGUSR2-signalen (som används av nodemon för att starta om), köra upprensningsprocessen och sedan döda sig själv för att nodemon ska kunna fortsätta att styra:

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

Bemärk att process.kill endast anropas när dina avstängningsjobb är klara. Hatttips till Benjie Gillam för att ha skrivit upp den här tekniken.

Utlösa händelser när nodemon tillstånd ändras

Om du vill ha growl-liknande meddelanden när nodemon startas om eller för att utlösa en åtgärd när en händelse inträffar kan du antingen require nodemon eller lägga till händelsemått i din nodemon.json-fil.

För att till exempel utlösa ett meddelande på en Mac när nodemon startas om ser nodemon.json ut så här:

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

En fullständig lista över tillgängliga händelser finns på wikin för event states. Observera att du kan binda till både tillstånd och meddelanden.

Pipe output till någon annanstans

Använda nodemon i ditt gulp-arbetsflöde

Kolla in pluginet gulp-nodemon för att integrera nodemon med resten av ditt projekts gulp-arbetsflöde.

Användning av nodemon i ditt Grunt-arbetsflöde

Kolla in insticksmodulen grunt-nodemon för att integrera nodemon med resten av ditt projekts grunt-arbetsflöde.

Uttal

Nodemon, uttalas det: node-mon, no-demon eller node-e-mon (som pokémon)?

Ja…jag har fått den här frågan många gånger tidigare. Jag gillar att jag har fått den här frågan tidigare. Det har varit vadslagningar om vilken det egentligen är.

Svaret är enkelt, men möjligen frustrerande. Jag säger inte (hur jag uttalar det). Det är upp till dig att kalla det som du vill. Alla svar är korrekta 🙂

Designprinciper

  • Förmågor är bättre
  • Fungerar på alla plattformar
  • Förmågor är bättre
  • Förmågor är bättre
  • Låta individer. bygga ovanpå nodemon
  • Ange all CLI-funktionalitet som ett API
  • Bidrag måste ha och klara tester

Nodemon är inte perfekt, och CLI-argumenten har spridit sig bortom vad jag är helt nöjd med, men kanske kan det minskas lite en dag.

FAQ

Se FAQ och lägg gärna till dina egna frågor om du tror att de kan hjälpa andra.

Backers

Tack till alla våra backers! 🙏

Sponsorer

Stötta detta projekt genom att bli sponsor. Din logotyp kommer att visas här med en länk till din webbplats. Sponsorera det här projektet i dag ❤️

Licens

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

Lämna ett svar

Din e-postadress kommer inte publiceras.