nodemon er et værktøj, der hjælper med at udvikle node.js-baserede applikationer ved automatisk at genstarte node-applikationen, når der registreres filændringer i mappen.

nodemon kræver ingen yderligere ændringer i din kode eller udviklingsmetode.nodemon er en erstatningswrapper for node. Hvis du vil bruge nodemon, skal du erstatte ordet node på kommandolinjen, når du udfører dit script.

Installation

Enten gennem kloning med git eller ved hjælp af npm (den anbefalede måde):

npm install -g nodemon

Og nodemon vil blive installeret globalt til din systemsti.

Du kan også installere nodemon som en udviklingsafhængighed:

npm install --save-dev nodemon

Med en lokal installation vil nodemon ikke være tilgængelig i din systemsti. I stedet kan den lokale installation af nodemon køres ved at kalde den fra et npm-script (f.eks. npm start) eller ved hjælp af npx nodemon.

Anvendelse

nodemon omslutter dit program, så du kan videregive alle de argumenter, du normalt ville videregive til dit program:

nodemon 

For CLI-indstillinger skal du bruge -h-argumentet (eller --help-argumentet):

nodemon -h

Brug af nodemon er simpelt, hvis mit program accepterede en vært og port som argumenter, ville jeg starte det således:

nodemon ./server.js localhost 8080

Alt output fra dette script er præfikset med , ellers vil alt output fra dit program, inklusive fejl, blive ekkoet som forventet.

Hvis der ikke er angivet noget script, vil nodemon teste for en package.json-fil, og hvis den findes, vil den køre den fil, der er tilknyttet hovedegenskaben (ref).

Du kan også sende inspect-flaget til nodemon via kommandolinjen, som du normalt ville gøre det:

nodemon --inspect ./server.js 80

Hvis du har en package.json-fil til din app, kan du helt udelade hovedscriptet, og nodemon vil læse package.json for main-egenskaben og bruge denne værdi som app.

nodemon vil også søge efter scripts.start-egenskaben i package.json (fra og med nodemon 1.1.x).

Se også FAQ eller issues for nodemon.

Automatisk genkørsel

nodemon blev oprindeligt skrevet til at genstarte hængende processer som f.eks. webservere, men understøtter nu apps, der afsluttes rent. Hvis dit script afsluttes rent, vil nodemon fortsætte med at overvåge mappen (eller mapperne) og genstarte scriptet, hvis der sker ændringer.

Manuel genstart

Medens nodemon kører, kan du, hvis du har brug for at genstarte dit program manuelt, i stedet for at stoppe og genstarte nodemon, skrive rs med en vogn retur, hvorefter nodemon genstarter din proces.

Konfigurationsfiler

nodemon understøtter lokale og globale konfigurationsfiler. Disse har normalt navnet nodemon.json og kan være placeret i den aktuelle arbejdskatalog eller i din hjemmemappe. En alternativ lokal konfigurationsfil kan angives med indstillingen --config <file>.

Specificeringen er som følger, så et kommandolinjeargument vil altid tilsidesætte indstillingerne i konfigurationsfilen:

  • kommandolinjeargumenter
  • lokal config
  • global config

En konfigurationsfil kan tage ethvert af kommandolinjeargumenterne som JSON-nøgleværdier, f.eks:

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

Overstående nodemon.json-fil kan være min globale config, så jeg har understøttelse for ruby-filer og behandlingsfiler, og jeg kan køre nodemon demo.pde, og nodemon vil automatisk vide, hvordan scriptet skal køres, selv om der ud af boksen er understøttelse for behandling af scripts.

Et yderligere eksempel på indstillinger kan ses i sample-nodemon.md

package.json

Hvis du ønsker at opbevare alle dine pakkekonfigurationer ét sted, understøtter nodemon brugen af package.json til konfiguration.Angiv konfigurationen i samme format som du ville gøre for en konfigurationsfil, men under nodemonConfig i package.json-filen, tag f.eks. følgende package.json:

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

Bemærk, at hvis du angiver en --config-fil eller angiver en lokal nodemon.json, ignoreres enhver package.json-konfiguration.

Dette afsnit har brug for bedre dokumentation, men indtil videre kan du også se nodemon --help config (også her).

Brug af nodemon som modul

Se venligst doc/requireable.md

Brug af nodemon som child process

Se venligst doc/events.md

Kørsel af ikke-nodemon-scripts

nodemon kan også bruges til at udføre og overvåge andre programmer. nodemon vil læse filudvidelsen for det script, der køres, og overvåge denne udvidelse i stedet for .js, hvis der ikke er nogen nodemon.json:

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

Nu vil nodemon køre app.py med python i verbose-tilstand (bemærk, at hvis du ikke afleverer args til det udførende program, behøver du ikke anførselstegnene), og kigge efter nye eller ændrede filer med udvidelsen .py.

Standard eksekverbare filer

Ved hjælp af konfigurationsfilen nodemon.json kan du definere dine egne standardeksekverbare filer ved hjælp af egenskaben execMap. Dette er især nyttigt, hvis du arbejder med et sprog, der ikke understøttes som standard af nodemon.

For at tilføje understøttelse af, at nodemon kender til udvidelsen .pl (for Perl), ville nodemon.json-filen tilføje:

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

Nu, når du kører følgende, vil nodemon vide, at han skal bruge perl som eksekverbar fil:

nodemon script.pl

Det anbefales generelt at bruge den globale nodemon.json til at tilføje dine egne execMap-indstillinger. Hvis der imidlertid er en almindelig standardindstilling, der mangler, kan denne tilføjes til projektet, så nodemon understøtter den som standard, ved at ændre default.js og sende en pull-anmodning.

Overvågning af flere mapper

Som standard overvåger nodemon den aktuelle arbejdsmappe. Hvis du vil tage kontrol over denne indstilling, skal du bruge --watch-indstillingen til at tilføje specifikke stier:

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

Nu genstarter nodemon kun, hvis der er ændringer i mappen ./app eller ./libs. Som standard vil nodemon gennemløbe undermapper, så der er ingen grund til eksplicit at inkludere undermapper.

Brug ikke unix globbing til at videregive flere mapper, f.eks. --watch ./lib/*, det vil ikke virke. Du skal bruge et --watch-flag pr. overvåget mappe.

Angivelse af udvidelsesovervågningsliste

nodemon -e js,pug

Nu genstarter nodemon ved enhver ændring af filer i mappen (eller undermapper) med udvidelserne .js, .pug.

Ignorering af filer

Som standard genstarter nodemon kun, når en .js JavaScript-fil ændres. I nogle tilfælde vil du ønske at ignorere nogle specifikke filer, mapper eller filmønstre for at forhindre, at nodemon genstarter dit program for tidligt.

Dette kan gøres via kommandolinjen:

nodemon --ignore lib/ --ignore tests/

Og specifikke filer kan ignoreres:

nodemon --ignore lib/app.js

Mønstre kan også ignoreres (men du skal sørge for at citere argumenterne):

nodemon --ignore 'lib/*.js'

Bemærk, at nodemon som standard vil ignorere mapperne .git, node_modules, bower_components, .nyc_output, coverage og .sass-cache og tilføje dine ignorerede mønstre til listen. Hvis du rent faktisk vil holde øje med en mappe som node_modules, skal du tilsidesætte de underliggende standardregler for ignorering.

Programmet genstartes ikke

I nogle netværksmiljøer (f.eks. en container, der kører nodemon og læser på tværs af et monteret drev), skal du bruge legacyWatch: true, som aktiverer Chokidars polling.

Via CLI’en skal du bruge enten --legacy-watch eller -L kort sagt:

nodemon -L

Dette bør dog være en sidste udvej, da den vil poll’e hver eneste fil, den kan finde.

Forsinkelse af genstart

I nogle situationer vil du måske vente, indtil et antal filer er ændret. Timeout før der kontrolleres for nye filændringer er 1 sekund. Hvis du uploader et antal filer, og det tager et vist antal sekunder, kan det medføre, at din app genstarter flere gange unødigt.

For at tilføje en ekstra throttle eller forsinke genstarten skal du bruge kommandoen --delay:

nodemon --delay 10 server.js

For mere præcision kan millisekunder angives. Enten som et float:

nodemon --delay 2.5 server.js

Og ved hjælp af tidsspecifikatoren (ms):

nodemon --delay 2500ms server.js

Tallet for forsinkelse er antallet af sekunder (eller millisekunder, hvis det er angivet), der skal forsinkes før genstart. Så nodemon genstarter kun din app det angivne antal sekunder efter den sidste filændring.

Hvis du indstiller denne værdi i nodemon.json, vil værdien altid blive fortolket i millisekunder. F.eks, følgende er ækvivalente:

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

Nådigt genindlæsning ned dit script

Det er muligt at få nodemon til at sende ethvert signal, som du angiver, til dit program.

nodemon --signal SIGHUP server.js

Dit program kan håndtere signalet på følgende måde.

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

Bemærk, at nodemon sender dette signal til alle processer i procestræet.

Hvis du bruger cluster, vil hver worker (samt master) modtage signalet. Hvis du ønsker at afslutte alle workers ved modtagelse af et SIGHUP, er et almindeligt mønster at fange SIGHUP i masteren og videresende SIGTERM til alle workers, samtidig med at du sikrer, at alle workers ignorerer SIGHUP.

Styring af nedlukning af dit script

nodemon sender et kill-signal til dit program, når det ser en filopdatering. Hvis du har brug for at rydde op ved nedlukning inde i dit script, kan du opfange kill-signalet og håndtere det selv.

Det følgende eksempel lytter én gang til SIGUSR2-signalet (som nodemon bruger til at genstarte), kører oprydningsprocessen og dræber derefter sig selv, så nodemon kan fortsætte kontrollen:

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

Bemærk, at process.kill kun kaldes, når dine nedlukningsjobs er færdige. Hat tip til Benjie Gillam for at skrive denne teknik op.

Triggering events when nodemon state changes

Hvis du ønsker growl-lignende notifikationer, når nodemon genstarter, eller at udløse en handling, når der sker en hændelse, kan du enten require nodemon eller tilføje event actions til din nodemon.json-fil.

For eksempel, for at udløse en notifikation på en Mac, når nodemon genstarter, ser nodemon.json således ud:

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

En komplet liste over tilgængelige hændelser findes på wiki’en om hændelsestilstande. Bemærk, at du kan binde til både tilstande og meddelelser.

Pipe output til et andet sted

Brug af nodemon i din gulp-arbejdsgang

Kig på plugin’et gulp-nodemon for at integrere nodemon med resten af dit projekts gulp-arbejdsgang.

Brug af nodemon i din Grunt-arbejdsgang

Kig på grunt-nodemon-plugin’et for at integrere nodemon med resten af dit projekts grunt-arbejdsgang.

Udtalelse

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

Tja… jeg er blevet spurgt om det mange gange før. Jeg kan godt lide, at jeg er blevet spurgt om det før. Der har været væddemål om, hvilken en det egentlig er.

Svaret er enkelt, men muligvis frustrerende. Jeg siger ikke (hvordan jeg udtaler det). Det er op til dig at kalde det, som du vil. Alle svar er korrekte 🙂

Designprincipper

  • Flere flag er bedre
  • Funktioner på tværs af alle platforme
  • Flere funktioner
  • Lad enkeltpersoner bygge oven på nodemon
  • Byd al CLI-funktionalitet som et API
  • Bidrag skal have og bestå tests

Nodemon er ikke perfekt, og CLI-argumenterne har bredt sig ud over hvor jeg er helt tilfreds, men måske kan det reduceres lidt en dag.

FAQ

Se FAQ’en og tilføj gerne dine egne spørgsmål, hvis du mener, at de kan hjælpe andre.

Backers

Tak til alle vores backers! 🙏

Sponsorer

Støt dette projekt ved at blive sponsor. Dit logo vil blive vist her med et link til dit websted. Sponsor dette projekt i dag ❤️

Licens

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.