573 Stimmen

Wie lädt man Dateien in Node.js automatisch neu?

Irgendwelche Ideen, wie ich ein automatisches Neuladen von Dateien in Node.js implementieren könnte? Ich bin es leid, den Server jedes Mal neu zu starten, wenn ich eine Datei ändere. Anscheinend Node.js' require() Funktion lädt keine Dateien neu, wenn sie bereits angefordert wurden, also muss ich so vorgehen:

var sys     = require('sys'), 
    http    = require('http'),
    posix   = require('posix'),
    json    = require('./json');

var script_name = '/some/path/to/app.js';
this.app = require('./app').app;

process.watchFile(script_name, function(curr, prev){
    posix.cat(script_name).addCallback(function(content){
        process.compile( content, script_name );
    });
});

http.createServer(this.app).listen( 8080 );

Und in der app.js Datei, die ich habe:

var file = require('./file');
this.app = function(req, res) { 
    file.serveFile( req, res, 'file.js');  
}

Aber auch das funktioniert nicht - ich erhalte einen Fehler in der process.compile() Anweisung, die besagt, dass 'require' nicht definiert ist. process.compile wertet die app.js , hat aber keine Ahnung von den node.js-Globals.

5 Stimmen

Sie wissen, dass Sie diesen Code einfach bei jeder Anfrage ausführen können: Object.keys(require.cache).forEach(function(key) { delete require.cache[key]; });

1 Stimmen

0 Stimmen

Warum haben Sie zwei js-Dateien, app.js als Serverdatei sollte ausreichen?

20voto

JnBrymn Punkte 22642

nodemon tauchte bei einer Google-Suche zuerst auf, und es scheint zu funktionieren:

npm install nodemon -g
cd whatever_dir_holds_my_app
nodemon app.js

12voto

Ninh Pham Punkte 5700

nodemon ist eine großartige Sache. Ich füge einfach mehr Parameter für Debugging und Überwachungsoptionen hinzu.

paket.json

  "scripts": {
    "dev": "cross-env NODE_ENV=development nodemon --watch server --inspect ./server/server.js"
  }

Der Befehl: nodemon --watch server --inspect ./server/server.js

in Erwägung nachstehender Gründe:

--watch server Neustart der App bei Änderungen .js , .mjs , .coffee , .litcoffee y .json Dateien im server Ordner (einschließlich Unterordner).

--inspect Fern-Debugging aktivieren.

./server/server.js Der Einstiegspunkt.

Fügen Sie dann die folgende Konfiguration zu launch.json (VS Code) und können jederzeit mit dem Debugging beginnen.

{
    "type": "node",
    "request": "attach",
    "name": "Attach",
    "protocol": "inspector",
    "port": 9229
}

Beachten Sie, dass es besser ist, die nodemon als Dev-Abhängigkeit des Projekts. Ihre Teammitglieder brauchen es also nicht zu installieren oder sich die Befehlsargumente zu merken, sie brauchen nur npm run dev und beginnen Sie zu hacken.

Siehe mehr auf nodemon docs: https://github.com/remy/nodemon#monitoring-multiple-directories

0 Stimmen

Globbing wird von neueren Versionen von nodemon (mindestens 1.19.0) nicht unterstützt. Verwenden Sie stattdessen einfach nodemon --watch server --inspect ./server/server.js.

0 Stimmen

Danke @Alex für deine Informationen. Ich habe die Antwort aktualisiert.

0 Stimmen

Gibt es eine Möglichkeit, die App mit einem Rebuild für alle Änderungen an Client-seitigen Dateien in der React-App neu zu erstellen?

8voto

l3o Punkte 113

Node-dev funktioniert hervorragend. npm install node-dev

Es gibt sogar eine Desktop-Benachrichtigung, wenn der Server neu geladen wird, und meldet Erfolg oder Fehler in der Meldung.

starten Sie Ihre Anwendung auf der Kommandozeile mit:

node-dev app.js

8voto

azwar_akbar Punkte 1208

Sie können verwenden nodemon de NPM . Und wenn Sie den Express-Generator verwenden, können Sie diesen Befehl in Ihrem Projektordner verwenden:

nodemon npm start

oder im Debug-Modus

DEBUG=yourapp:* nodemon npm start

können Sie auch direkt ausführen

nodemon your-app-file.js

Ich hoffe, das hilft.

1 Stimmen

Dies funktioniert unter Windows, wenn Sie Folgendes eingeben set DEBUG=myapp:* & nodemon npm start

1 Stimmen

Ich musste auch diese Anweisungen befolgen, um nodemon global zu installieren stackoverflow.com/a/40359656/74585

1 Stimmen

Ich habe den Expressgenerator verwendet und nodemon npm start hat wirklich funktioniert, danke

8voto

Richard Metzler Punkte 545

Es gibt einen Node-Supervisor, den Sie installieren können, indem Sie

npm install supervisor

siehe http://github.com/isaacs/node-supervisor

2 Stimmen

Es geht eher darum, den Server neu zu starten, wenn er abstürzt. node-supervisor startet auch den gesamten Prozess neu, wenn überwachte Dateien geändert wurden. Es handelt sich nicht um Hot-Reload im engeren Sinne.

0 Stimmen

Obwohl es sich nicht wirklich um Hot-Loading handelt, ist dieses Tool sehr nützlich, wenn Sie einfach nur möchten, dass der Code während der Entwicklung automatisch geladen wird, damit Sie Node nicht nach jeder Änderung in der Befehlszeile neu starten müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X