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

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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.