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
- Användning
- Automatisk omstart
- Manuell omstart
- Konfigurationsfiler
- package.json
- Användning av nodemon som modul
- Användning av nodemon som underordnad process
- Körning av skript som inte är nodemon
- Standardkörbara program
- Övervakning av flera kataloger
- Specificering av bevakningslista för tillägg
- Ignorera filer
- Programmet startas inte om
- Fördröjning av omstart
- Graciöst omladdning ner ditt skript
- Kontrollera avstängningen av ditt skript
- Utlösa händelser när nodemon tillstånd ändras
- Pipe output till någon annanstans
- Använda nodemon i ditt gulp-arbetsflöde
- Användning av nodemon i ditt Grunt-arbetsflöde
- Uttal
- Designprinciper
- FAQ
- Backers
- Sponsorer
- Licens
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