nodemon ist ein Tool, das bei der Entwicklung von node.js-basierten Anwendungen hilft, indem es die node-Anwendung automatisch neu startet, wenn Datei-Änderungen im Verzeichnis erkannt werden.
nodemon erfordert keine zusätzlichen Änderungen an Ihrem Code oder Ihrer Entwicklungsmethode. nodemon ist ein Ersatz-Wrapper für node
. Um nodemon
zu verwenden, ersetzen Sie das Wort node
auf der Kommandozeile, wenn Sie Ihr Skript ausführen.
- Installation
- Verwendung
- Automatische Wiederaufnahme
- Manueller Neustart
- Konfigurationsdateien
- package.json
- Nodemon als Modul verwenden
- Nodemon als Kindprozess verwenden
- Ausführen von Nicht-Node-Skripten
- Standard-Executables
- Mehrere Verzeichnisse überwachen
- Spezifizieren der Erweiterungsüberwachungsliste
- Ignorieren von Dateien
- Anwendung startet nicht neu
- Neustart verzögern
- Ihr Skript wird ordnungsgemäß nachgeladen
- Steuerung des Herunterfahrens Ihres Skripts
- Auslösen von Ereignissen, wenn sich der Nodemon-Status ändert
- Pipe output to somewhere else
- Using nodemon in your gulp workflow
- Verwenden Sie nodemon in Ihrem Grunt-Workflow
- Aussprache
- Designprinzipien
- FAQ
- Unterstützer
- Sponsoren
- Lizenz
Installation
Etweder durch Klonen mit git oder durch Verwendung von npm (der empfohlene Weg):
npm install -g nodemon
Und nodemon wird global in Ihrem Systempfad installiert.
Sie können nodemon auch als Entwicklungsabhängigkeit installieren:
npm install --save-dev nodemon
Bei einer lokalen Installation wird nodemon nicht in Ihrem Systempfad verfügbar sein. Stattdessen kann die lokale Installation von nodemon ausgeführt werden, indem sie aus einem npm-Skript (z. B. npm start
) oder mit npx nodemon
aufgerufen wird.
Verwendung
nodemon umhüllt Ihre Anwendung, so dass Sie alle Argumente übergeben können, die Sie normalerweise an Ihre Anwendung übergeben würden:
nodemon
Für CLI-Optionen verwenden Sie das -h
(oder --help
) Argument:
nodemon -h
Die Verwendung von nodemon ist einfach, wenn meine Anwendung einen Host und einen Port als Argumente akzeptiert, würde ich sie so starten:
nodemon ./server.js localhost 8080
Jegliche Ausgabe von diesem Skript wird mit vorangestellt, andernfalls werden alle Ausgaben von Ihrer Anwendung, einschließlich Fehlern, wie erwartet als Echo ausgegeben.
Wenn kein Skript angegeben wird, sucht nodemon nach einer package.json
-Datei und führt, falls gefunden, die mit der Haupteigenschaft (ref) verbundene Datei aus.
Sie können das inspect
-Flag auch über die Kommandozeile an node übergeben, wie Sie es normalerweise tun würden:
nodemon --inspect ./server.js 80
Wenn Sie eine package.json
-Datei für Ihre Anwendung haben, können Sie das Hauptskript ganz weglassen und nodemon wird die package.json
für die main
-Eigenschaft lesen und diesen Wert als Anwendung verwenden.
nodemon sucht auch nach der scripts.start
-Eigenschaft in package.json
(ab nodemon 1.1.x).
Sieh dir auch die FAQ oder die Probleme für nodemon an.
Automatische Wiederaufnahme
nodemon wurde ursprünglich geschrieben, um hängende Prozesse wie Webserver neu zu starten, unterstützt jetzt aber Anwendungen, die sauber beendet werden. Wenn Ihr Skript sauber beendet wird, wird nodemon das Verzeichnis (oder die Verzeichnisse) weiter überwachen und das Skript neu starten, wenn es irgendwelche Änderungen gibt.
Manueller Neustart
Wenn Sie während der Ausführung von nodemon Ihre Anwendung manuell neu starten müssen, können Sie, anstatt nodemon zu stoppen und neu zu starten, rs
mit einem Zeilenumbruch eingeben, und nodemon wird Ihren Prozess neu starten.
Konfigurationsdateien
nodemon unterstützt lokale und globale Konfigurationsdateien. Diese tragen in der Regel den Namen nodemon.json
und können sich im aktuellen Arbeitsverzeichnis oder im Heimatverzeichnis befinden. Eine alternative lokale Konfigurationsdatei kann mit der Option --config <file>
angegeben werden.
Die Spezifität ist wie folgt, so dass ein Kommandozeilenargument immer die Einstellungen der Konfigurationsdatei überschreibt:
- Kommandozeilenargumente
- lokale Konfiguration
- globale Konfiguration
Eine Konfigurationsdatei kann jedes der Kommandozeilenargumente als JSON-Schlüsselwerte annehmen, zum Beispiel:
{ "verbose": true, "ignore": , "execMap": { "rb": "ruby", "pde": "processing --sketch={{pwd}} --run" }}
Die obige nodemon.json
Datei könnte meine globale Konfigurationsdatei sein, so dass ich Unterstützung für Ruby-Dateien und Verarbeitungsdateien habe, und ich kann nodemon demo.pde
ausführen und Nodemon wird automatisch wissen, wie das Skript auszuführen ist, obwohl es von Haus aus Unterstützung für Verarbeitungsskripte hat.
Ein weiteres Beispiel für Optionen finden Sie in sample-nodemon.md
package.json
Wenn Sie alle Ihre Paketkonfigurationen an einem Ort aufbewahren möchten, unterstützt nodemon die Verwendung von package.json
für die Konfiguration.Geben Sie die Konfiguration im gleichen Format an, wie Sie es für eine Konfigurationsdatei tun würden, aber unter nodemonConfig
in der package.json
-Datei, zum Beispiel wie folgt package.json
:
{ "name": "nodemon", "homepage": "http://nodemon.io", "...": "... other standard package.json values", "nodemonConfig": { "ignore": , "delay": "2500" }}
Beachten Sie, dass jede package.json
-Konfiguration ignoriert wird, wenn Sie eine --config
-Datei angeben oder eine lokale nodemon.json
bereitstellen.
Dieser Abschnitt benötigt eine bessere Dokumentation, aber für den Moment kann man auch nodemon --help config
(auch hier) sehen.
Nodemon als Modul verwenden
Bitte siehe doc/requireable.md
Nodemon als Kindprozess verwenden
Bitte siehe doc/events.md
Ausführen von Nicht-Node-Skripten
nodemon kann auch zum Ausführen und Überwachen anderer Programme verwendet werden. nodemon liest die Dateierweiterung des Skripts, das ausgeführt wird, und überwacht diese Erweiterung anstelle von .js
, wenn es keine nodemon.json
gibt:
nodemon --exec "python -v" ./app.py
Jetzt führt nodemon app.py
mit Python im ausführlichen Modus aus (beachten Sie, dass Sie die Anführungszeichen nicht benötigen, wenn Sie keine Args an das exec-Programm übergeben) und sucht nach neuen oder geänderten Dateien mit der Erweiterung .py
.
Standard-Executables
Mit der nodemon.json
-Konfigurationsdatei können Sie Ihre eigenen Standard-Executables mit der Eigenschaft execMap
definieren. Dies ist besonders nützlich, wenn Sie mit einer Sprache arbeiten, die nicht standardmäßig von Nodemon unterstützt wird.
Um nodemon die Unterstützung für die .pl
-Erweiterung (für Perl) hinzuzufügen, würde die nodemon.json
-Datei Folgendes hinzufügen:
{ "execMap": { "pl": "perl" }}
Wenn Sie nun Folgendes ausführen, weiß nodemon, dass perl
als ausführbare Datei zu verwenden ist:
nodemon script.pl
Im Allgemeinen wird empfohlen, die globale nodemon.json
zu verwenden, um Ihre eigenen execMap
-Optionen hinzuzufügen. Wenn es jedoch einen allgemeinen Standard gibt, der fehlt, kann dieser in das Projekt eingebunden werden, so dass nodemon ihn standardmäßig unterstützt, indem man default.js ändert und einen Pull-Request sendet.
Mehrere Verzeichnisse überwachen
Standardmäßig überwacht nodemon das aktuelle Arbeitsverzeichnis. Wenn Sie die Kontrolle über diese Option übernehmen möchten, verwenden Sie die Option --watch
, um bestimmte Pfade hinzuzufügen:
nodemon --watch app --watch libs app/server.js
Nun wird nodemon nur neu gestartet, wenn es Änderungen im Verzeichnis ./app
oder ./libs
gibt. Standardmäßig durchläuft nodemon Unterverzeichnisse, so dass es nicht nötig ist, Unterverzeichnisse explizit einzubeziehen.
Verwenden Sie kein Unix-Globbing, um mehrere Verzeichnisse zu übergeben, z.B. --watch ./lib/*
, das wird nicht funktionieren. Sie brauchen ein --watch
Flag pro überwachtem Verzeichnis.
Spezifizieren der Erweiterungsüberwachungsliste
nodemon -e js,pug
Jetzt wird nodemon bei jeder Änderung an Dateien im Verzeichnis (oder Unterverzeichnissen) mit den Erweiterungen .js
, .pug
neu gestartet.
Ignorieren von Dateien
Standardmäßig wird nodemon nur neu gestartet, wenn sich eine .js
JavaScript-Datei ändert. In manchen Fällen werden Sie bestimmte Dateien, Verzeichnisse oder Dateimuster ignorieren wollen, um zu verhindern, dass nodemon Ihre Anwendung vorzeitig neu startet.
Dies kann über die Kommandozeile erfolgen:
nodemon --ignore lib/ --ignore tests/
Oder bestimmte Dateien können ignoriert werden:
nodemon --ignore lib/app.js
Muster können ebenfalls ignoriert werden (aber achten Sie darauf, die Argumente zu zitieren):
nodemon --ignore 'lib/*.js'
Bitte beachten Sie, dass nodemon standardmäßig die Verzeichnisse .git
, node_modules
, bower_components
, .nyc_output
, coverage
und .sass-cache
ignoriert und Ihre ignorierten Muster der Liste hinzufügt. Wenn Sie ein Verzeichnis wie node_modules
tatsächlich überwachen wollen, müssen Sie die zugrundeliegenden Standard-Ignore-Regeln außer Kraft setzen.
Anwendung startet nicht neu
In einigen Netzwerkumgebungen (z.B. in einem Container, in dem Nodemon läuft, der über ein gemountetes Laufwerk liest), müssen Sie legacyWatch: true
verwenden, das Chokidars Polling aktiviert.
Über die CLI kann man entweder --legacy-watch
oder -L
verwenden:
nodemon -L
Dies sollte allerdings nur als letztes Mittel eingesetzt werden, da Chokidar jede Datei abfragt, die es finden kann.
Neustart verzögern
In manchen Situationen kann es sinnvoll sein, zu warten, bis sich eine Reihe von Dateien geändert haben. Die Zeitüberschreitung vor der Prüfung auf neue Dateiänderungen beträgt 1 Sekunde. Wenn Sie eine Reihe von Dateien hochladen und dies einige Sekunden dauert, kann dies dazu führen, dass Ihre Anwendung unnötigerweise mehrmals neu gestartet wird.
Um eine zusätzliche Drosselung hinzuzufügen oder den Neustart zu verzögern, verwenden Sie den Befehl --delay
:
nodemon --delay 10 server.js
Für mehr Präzision können Millisekunden angegeben werden. Entweder als Fließkommazahl:
nodemon --delay 2.5 server.js
Oder unter Verwendung der Zeitangabe (ms):
nodemon --delay 2500ms server.js
Die Verzögerungszahl ist die Anzahl der Sekunden (oder Millisekunden, falls angegeben), die vor dem Neustart gewartet wird. Nodemon wird Ihre Anwendung also nur die angegebene Anzahl von Sekunden nach der letzten Datei-Änderung neu starten.
Wenn Sie diesen Wert in nodemon.json
einstellen, wird der Wert immer in Millisekunden interpretiert. Z.B., sind die folgenden gleichwertig:
nodemon --delay 2.5{ "delay": "2500"}
Ihr Skript wird ordnungsgemäß nachgeladen
Es ist möglich, dass nodemon ein beliebiges Signal an Ihre Anwendung sendet, das Sie angeben.
nodemon --signal SIGHUP server.js
Ihre Anwendung kann das Signal wie folgt behandeln.
process.once("SIGHUP", function () { reloadSomeConfiguration();})
Bitte beachten Sie, dass nodemon dieses Signal an jeden Prozess im Prozessbaum sendet.
Wenn Sie cluster
verwenden, dann erhält jeder Worker (sowie der Master) das Signal. Wenn Sie alle Worker beim Empfang eines SIGHUP
beenden wollen, ist es ein gängiges Muster, das SIGHUP
im Master abzufangen und SIGTERM
an alle Worker weiterzuleiten, wobei sichergestellt wird, dass alle Worker SIGHUP
ignorieren.
Steuerung des Herunterfahrens Ihres Skripts
nodemon sendet ein Kill-Signal an Ihre Anwendung, wenn es eine Dateiaktualisierung sieht. Wenn Sie beim Herunterfahren innerhalb Ihres Skripts aufräumen müssen, können Sie das Kill-Signal abfangen und es selbst verarbeiten.
Das folgende Beispiel wartet einmal auf das SIGUSR2
-Signal (das von Nodemon zum Neustart verwendet wird), führt den Aufräumprozess aus und beendet sich dann selbst, damit Nodemon die Kontrolle fortsetzen kann:
process.once('SIGUSR2', function () { gracefulShutdown(function () { process.kill(process.pid, 'SIGUSR2'); });});
Beachten Sie, dass process.kill
nur aufgerufen wird, wenn Ihre Shutdown-Jobs abgeschlossen sind. Hut ab vor Benjie Gillam, der diese Technik aufgeschrieben hat.
Auslösen von Ereignissen, wenn sich der Nodemon-Status ändert
Wenn man Growl-ähnliche Benachrichtigungen haben möchte, wenn Nodemon neu startet oder eine Aktion auslöst, wenn ein Ereignis eintritt, dann kann man entweder require
Nodemon oder Ereignis-Aktionen zu seiner nodemon.json
Datei hinzufügen.
Um zum Beispiel eine Benachrichtigung auf einem Mac auszulösen, wenn nodemon neu startet, sieht nodemon.json
wie folgt aus:
{ "events": { "restart": "osascript -e 'display notification \"app restarted\" with title \"nodemon\"'" }}
Eine vollständige Liste der verfügbaren Ereignisse ist im Wiki der Ereigniszustände aufgeführt. Beachten Sie, dass Sie sowohl an Zustände als auch an Nachrichten binden können.
Pipe output to somewhere else
Using nodemon in your gulp workflow
Check out the gulp-nodemon plugin to integrate nodemon with the rest of your project’s gulp workflow.
Verwenden Sie nodemon in Ihrem Grunt-Workflow
Schauen Sie sich das grunt-nodemon-Plugin an, um nodemon in den restlichen Grunt-Workflow Ihres Projekts zu integrieren.
Aussprache
Nodemon, wird es ausgesprochen: node-mon, no-demon oder node-e-mon (wie pokémon)?
Nun ja… ich wurde das schon oft gefragt. Ich mag es, dass ich das schon mal gefragt wurde. Es gibt Wetten darüber, welches es ist.
Die Antwort ist einfach, aber vielleicht frustrierend. Ich sage nicht (wie ich es ausspreche). Es liegt an Ihnen, es so zu nennen, wie Sie wollen. Alle Antworten sind richtig:)
Designprinzipien
- Weniger Flags ist besser
- Arbeitet über alle Plattformen hinweg
- Weniger Features
- Lasst Individuen auf Nodemon aufbauen
- Alle CLI-Funktionen als API anbieten
- Beiträge müssen Tests haben und bestehen
Nodemon ist nicht perfekt, und die CLI-Argumente haben sich über das Maß hinaus ausgedehnt, mit dem ich völlig zufrieden bin, aber vielleicht kann es eines Tages ein wenig reduziert werden.
FAQ
Sieh dir die FAQ an und füge bitte deine eigenen Fragen hinzu, wenn du denkst, dass sie anderen helfen könnten.
Unterstützer
Danke an alle unsere Unterstützer! 🙏
Sponsoren
Unterstützen Sie dieses Projekt, indem Sie ein Sponsor werden. Ihr Logo wird hier mit einem Link zu Ihrer Website erscheinen. Unterstützen Sie dieses Projekt noch heute ❤️
Lizenz
MIT http://rem.mit-license.org