nodemon is een tool die helpt bij het ontwikkelen van node.js gebaseerde applicaties door het automatisch herstarten van de node applicatie wanneer bestandswijzigingen in de directory worden gedetecteerd.
nodemon vereist geen extra wijzigingen in uw code of methode van ontwikkeling. nodemon is een vervangende wrapper voor node
. Om nodemon
te gebruiken, vervangt u het woord node
op de opdrachtregel bij het uitvoeren van uw script.
- Installatie
- Gebruik
- Automatisch opnieuw draaien
- Handmatig herstarten
- Configuratiebestanden
- package.json
- Nodemon gebruiken als module
- Nodemon gebruiken als child process
- Het uitvoeren van niet-nodemon scripts
- Standaard uitvoerbare bestanden
- Monitoren van meerdere directories
- Extensie watch list
- Bestanden negeren
- Applicatie start niet opnieuw
- Het uitstellen van herstarten
- Uw script
- Afsluiten van uw script regelen
- Events triggeren wanneer nodemon state verandert
- Pijp uitvoer naar ergens anders
- Het gebruik van nodemon in uw gulp-workflow
- Nodemon gebruiken in uw Grunt workflow
- Uitspraak
- Ontwerpprincipes
- FAQ
- Backers
- Sponsors
- Licentie
Installatie
Hetzij door klonen met git of door npm te gebruiken (de aanbevolen manier):
npm install -g nodemon
En nodemon wordt globaal op uw systeempad geïnstalleerd.
U kunt nodemon ook installeren als een ontwikkelingsafhankelijkheid:
npm install --save-dev nodemon
Met een lokale installatie zal nodemon niet beschikbaar zijn in uw systeempad. In plaats daarvan kan de lokale installatie van nodemon worden uitgevoerd door deze aan te roepen vanuit een npm-script (zoals npm start
) of door npx nodemon
te gebruiken.
Gebruik
nodemon omwikkelt uw toepassing, zodat u alle argumenten kunt doorgeven die u normaal aan uw toepassing zou doorgeven:
nodemon
Voor CLI-opties gebruikt u het -h
– (of --help
-)argument:
nodemon -h
Het gebruik van nodemon is eenvoudig, als mijn applicatie een host en poort als argumenten zou accepteren, zou ik het als volgt starten:
nodemon ./server.js localhost 8080
Alle uitvoer van dit script wordt voorafgegaan door , anders zal alle uitvoer van uw applicatie, inclusief fouten, worden geëchood zoals verwacht.
Als er geen script is opgegeven, zal nodemon testen op een package.json
-bestand en als het wordt gevonden, zal het het bestand uitvoeren dat is gekoppeld aan de belangrijkste eigenschap (ref).
U kunt ook de vlag inspect
aan node doorgeven via de opdrachtregel zoals u dat normaal zou doen:
nodemon --inspect ./server.js 80
Als u een package.json
bestand voor uw app hebt, kunt u het hoofdscript geheel weglaten en zal nodemon de package.json
voor de main
eigenschap lezen en die waarde gebruiken als de app.
nodemon zal ook zoeken naar de scripts.start
eigenschap in package.json
(vanaf nodemon 1.1.x).
Kijk ook eens naar de FAQ of issues voor nodemon.
Automatisch opnieuw draaien
nodemon is oorspronkelijk geschreven om hangende processen zoals webservers opnieuw te starten, maar ondersteunt nu apps die netjes afsluiten. Als uw script netjes afsluit, zal nodemon de directory (of directories) in de gaten blijven houden en het script herstarten als er veranderingen zijn.
Handmatig herstarten
Terwijl nodemon draait, kunt u, als u uw toepassing handmatig opnieuw moet starten, in plaats van te stoppen en nodemon opnieuw te starten, rs
typen met een carriage return, en nodemon zal uw proces opnieuw starten.
Configuratiebestanden
nodemon ondersteunt lokale en globale configuratiebestanden. Deze hebben gewoonlijk de naam nodemon.json
en kunnen zich in de huidige werkdirectory of in uw thuismap bevinden. Een alternatief lokaal configuratiebestand kan worden opgegeven met de optie --config <file>
.
De specificiteit is als volgt, zodat een command line argument altijd de config file instellingen zal overrulen:
- command line arguments
- local config
- global config
Een config file kan elk van de command line argumenten als JSON key values aannemen, bijvoorbeeld:
{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}
Het bovenstaande nodemon.json
bestand zou mijn globale config kunnen zijn, zodat ik ondersteuning heb voor ruby bestanden en verwerkingsbestanden, en ik kan nodemon demo.pde
uitvoeren en nodemon zal automatisch weten hoe het script uit te voeren, ook al is er out of the box ondersteuning voor verwerkingsscripts.
Een ander voorbeeld van opties kan worden gezien in sample-nodemon.md
package.json
Als u al uw pakketconfiguraties op één plaats wilt bewaren, ondersteunt nodemon het gebruik van package.json
voor configuratie.Specificeer de config in hetzelfde formaat als je zou doen voor een config-bestand, maar onder nodemonConfig
in het package.json
bestand, bijvoorbeeld, neem de volgende package.json
:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}
Merk op dat als je een --config
bestand specificeert of een lokale nodemon.json
opgeeft, elke package.json
config genegeerd wordt.
Deze sectie heeft betere documentatie nodig, maar voor nu kunt u ook nodemon --help config
(ook hier) zien.
Nodemon gebruiken als module
Zie doc/requireable.md
Nodemon gebruiken als child process
Zie doc/events.md
Het uitvoeren van niet-nodemon scripts
nodemon kan ook worden gebruikt om andere programma’s uit te voeren en te controleren. nodemon leest de bestandsextensie van het script dat wordt uitgevoerd en controleert die extensie in plaats van .js
als er geen nodemon.json
:
nodemon --exec "python -v" ./app.py
Nu zal nodemon app.py
uitvoeren met python in verbose-modus (merk op dat als u geen args doorgeeft aan het uitvoeringsprogramma, u de aanhalingstekens niet nodig hebt), en zoeken naar nieuwe of gewijzigde bestanden met de .py
-extensie.
Standaard uitvoerbare bestanden
Met behulp van het nodemon.json
config bestand, kunt u uw eigen standaard uitvoerbare bestanden definiëren met de execMap
eigenschap. Dit is vooral nuttig als u werkt met een taal die niet standaard door nodemon wordt ondersteund.
Om ondersteuning toe te voegen voor nodemon om te weten over de .pl
extensie (voor Perl), zou het nodemon.json
bestand moeten toevoegen:
{ "execMap": { "pl": "perl" }}
Nu het volgende wordt uitgevoerd, zal nodemon weten om perl
te gebruiken als het uitvoerbare bestand:
nodemon script.pl
Het wordt over het algemeen aanbevolen om de globale nodemon.json
te gebruiken om uw eigen execMap
opties toe te voegen. Echter, als er een standaard optie is die ontbreekt, kan deze worden samengevoegd in het project zodat nodemon deze standaard ondersteunt, door default.js aan te passen en een pull-request te sturen.
Monitoren van meerdere directories
Nodemon monitort standaard de huidige werkdirectory. Als u daar controle over wilt hebben, gebruik dan de --watch
optie om specifieke paden toe te voegen:
nodemon --watch app --watch libs app/server.js
Nu zal nodemon alleen herstarten als er veranderingen zijn in de ./app
of ./libs
directory. Standaard doorkruist nodemon submappen, dus het is niet nodig om submappen expliciet op te nemen.
Gebruik geen unix globbing om meerdere mappen door te geven, b.v. --watch ./lib/*
, dat zal niet werken. U hebt een --watch
vlag nodig per directory die wordt bekeken.
Extensie watch list
nodemon -e js,pug
Nu zal nodemon herstarten bij elke wijziging van bestanden in de directory (of subdirectories) met de extensies .js
, .pug
.
Bestanden negeren
In de standaardinstelling zal nodemon alleen herstarten wanneer een .js
JavaScript bestand wijzigt. In sommige gevallen zult u specifieke bestanden, mappen of bestandspatronen willen negeren, om te voorkomen dat nodemon uw toepassing voortijdig herstart.
Dit kan worden gedaan via de opdrachtregel:
nodemon --ignore lib/ --ignore tests/
Of specifieke bestanden kunnen worden genegeerd:
nodemon --ignore lib/app.js
Patronen kunnen ook worden genegeerd (maar zorg ervoor dat u de argumenten citeert):
nodemon --ignore 'lib/*.js'
Merk op dat nodemon standaard de mappen .git
, node_modules
, bower_components
, .nyc_output
, coverage
en .sass-cache
zal negeren en uw genegeerde patronen aan de lijst zal toevoegen. Als u inderdaad een directory zoals node_modules
in de gaten wilt houden, moet u de onderliggende standaard negeer regels overschrijven.
Applicatie start niet opnieuw
In sommige netwerk omgevingen (zoals een container die nodemon draait die over een gemount station leest), moet u de legacyWatch: true
gebruiken die Chokidar’s polling mogelijk maakt.
Via de CLI gebruikt u --legacy-watch
of -L
in het kort:
nodemon -L
Hoewel dit een laatste redmiddel zou moeten zijn omdat het elk bestand dat het kan vinden zal pollen.
Het uitstellen van herstarten
In sommige situaties wilt u misschien wachten totdat een aantal bestanden is veranderd. De time-out voor het controleren op nieuwe bestandswijzigingen is 1 seconde. Als u een aantal bestanden aan het uploaden bent en het duurt een aantal seconden, kan dit ertoe leiden dat uw app meerdere malen onnodig opnieuw moet opstarten.
Om een extra gas te geven, of het opnieuw opstarten uit te stellen, gebruikt u het --delay
commando:
nodemon --delay 10 server.js
Voor meer precisie kunnen milliseconden worden opgegeven. Hetzij als een float:
nodemon --delay 2.5 server.js
Of met de tijdsaanduiding (ms):
nodemon --delay 2500ms server.js
Het vertragingsgetal is het aantal seconden (of milliseconden, indien opgegeven) dat moet worden vertraagd voordat opnieuw wordt opgestart. Dus nodemon zal uw app pas herstarten na het opgegeven aantal seconden na de laatste bestandswijziging.
Als u deze waarde instelt in nodemon.json
, zal de waarde altijd worden geïnterpreteerd in milliseconden. Bijv, het volgende is gelijkwaardig:
nodemon --delay 2.5{ "delay": "2500"}
Uw script
Het is mogelijk om nodemon elk signaal dat u specificeert naar uw applicatie te laten sturen.
nodemon --signal SIGHUP server.js
Uw applicatie kan het signaal als volgt afhandelen.
process.once("SIGHUP", function () { reloadSomeConfiguration();})
Let erop dat nodemon dit signaal naar elk proces in de procesboom stuurt.
Als je cluster
gebruikt, dan zullen alle workers (en ook de master) het signaal ontvangen. Als u alle werkers wilt afsluiten bij het ontvangen van een SIGHUP
, is een gebruikelijk patroon om de SIGHUP
op te vangen in de master, en SIGTERM
door te sturen naar alle werkers, terwijl u ervoor zorgt dat alle werkers SIGHUP
negeren.
Afsluiten van uw script regelen
nodemon stuurt een kill-signaal naar uw applicatie wanneer het een bestandsupdate ziet. Als je moet opruimen bij het afsluiten van je script, kun je het kill-signaal opvangen en zelf afhandelen.
Het volgende voorbeeld luistert eenmaal naar het SIGUSR2
-signaal (gebruikt door nodemon om opnieuw op te starten), voert het opruimproces uit en doodt dan zichzelf zodat nodemon de controle kan voortzetten:
process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});
Merk op dat process.kill
pas wordt aangeroepen als je shutdown-opdrachten zijn voltooid. Petje af voor Benjie Gillam voor het opschrijven van deze techniek.
Events triggeren wanneer nodemon state verandert
Als u growl-achtige meldingen wilt wanneer nodemon opnieuw opstart of een actie wilt triggeren wanneer een event plaatsvindt, dan kunt u require
nodemon of event actions toevoegen aan uw nodemon.json
bestand.
Om bijvoorbeeld een melding op een Mac te activeren wanneer nodemon opnieuw wordt gestart, ziet nodemon.json
er als volgt uit:
{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}
Een volledige lijst van beschikbare gebeurtenissen is te vinden op de gebeurtenisstatussen wiki. Merk op dat u kunt binden aan zowel toestanden als berichten.
Pijp uitvoer naar ergens anders
Het gebruik van nodemon in uw gulp-workflow
Kijk eens naar de gulp-nodemon plugin om nodemon te integreren met de rest van de gulp-workflow van uw project.
Nodemon gebruiken in uw Grunt workflow
Kijk eens naar de grunt-nodemon plugin om nodemon te integreren met de rest van de grunt workflow van uw project.
Uitspraak
nodemon, wordt het uitgesproken als: node-mon, no-demon of node-e-mon (zoals pokémon)?
Wel… dit is me al vele malen gevraagd. Ik vind het leuk dat dit me al eerder is gevraagd. Er is gewed over welke het nu eigenlijk is.
Het antwoord is simpel, maar mogelijk frustrerend. Ik zeg niet (hoe ik het uitspreek). Het is aan u om het te noemen zoals u wilt. Alle antwoorden zijn correct 🙂
Ontwerpprincipes
- Minder vlaggen is beter
- Werkt op alle platforms
- Minder functies
- Laat individuen bovenop nodemon bouwen
- Alle CLI functionaliteit als API aanbieden
- Bijdragen moeten tests hebben en doorstaan
Nodemon is niet perfect, en de CLI argumenten zijn verder uitgespreid dan waar ik helemaal gelukkig ben, maar misschien kan het op een dag een beetje verminderd worden.
FAQ
Zie de FAQ en voeg uw eigen vragen toe als u denkt dat ze anderen zouden helpen.
Backers
Dank aan al onze backers! 🙏
Sponsors
Steun dit project door sponsor te worden. Uw logo zal hier verschijnen met een link naar uw website. Sponsor dit project vandaag nog ❤️
Licentie
MIT http://rem.mit-license.org