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

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.