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?

1voto

Lex Soft Punkte 1714

Ich habe versucht pm2 Installation: Die Installation ist einfach und auch die Anwendung ist einfach; das Ergebnis ist zufriedenstellend. Allerdings muss man darauf achten, welche Edition von pm2 man haben möchte. pm 2 runtime ist die kostenlose Edition, während pm2 plus und pm2 enterprise nicht kostenlos sind.

In Bezug auf Starke Schleife Meine Installation schlug fehl oder war nicht vollständig, so dass ich sie nicht nutzen konnte.

1voto

lukyer Punkte 6697

Keine Verwendung erforderlich nodemon oder andere Tools dieser Art. Nutzen Sie einfach die Möglichkeiten Ihrer IDE.

Die wahrscheinlich beste ist IntelliJ WebStorm mit Hot-Reload-Funktion (automatisches Neuladen von Server und Browser) für node.js .

0voto

dansch Punkte 5578

Loaddir ist meine Lösung für das schnelle Laden eines Verzeichnisses, rekursiv.

kann zurückkehren

{ 'path/to/file': 'fileContents...' } oder { path: { to: { file: 'fileContents'} } }

Sie hat callback die aufgerufen wird, wenn die Datei geändert wird.

Es behandelt Situationen, in denen die Dateien so groß sind, dass watch aufgerufen wird, bevor sie mit dem Schreiben fertig sind.

Ich verwende es seit etwa einem Jahr in Projekten und habe es erst kürzlich um Versprechen erweitert.

Hilf mir beim Kampftest!

https://github.com/danschumann/loaddir

0voto

BottleLiu Punkte 29
const cleanCache = (moduleId) => {
    const module = require.cache[moduleId];
    if (!module) {
        return;
    }
    // 1. clean parent
    if (module.parent) {
        module.parent.children.splice(module.parent.children.indexOf(module), 1);
    }
    // 2. clean self
    require.cache[moduleId] = null;
};

0voto

Aaron Storck Punkte 886

Ich bin kürzlich auf diese Frage gestoßen, weil die üblichen Verdächtigen nicht mit verknüpften Paketen funktionieren. Wenn es Ihnen wie mir geht und Sie die Vorteile von npm link Um während der Entwicklung effektiv an einem Projekt arbeiten zu können, das aus vielen Paketen besteht, ist es wichtig, dass Änderungen in den Abhängigkeiten ebenfalls einen Reload auslösen.

Nachdem ich node-mon und pm2 ausprobiert habe und sogar deren Anweisungen zur zusätzlichen Überwachung des Ordners node_modules befolgt habe, haben sie immer noch keine Änderungen erkannt. Obwohl es in den Antworten hier einige angepasste Lösungen gibt, ist ein separates Paket für so etwas sauberer. Ich stieß auf node-dev und es funktioniert perfekt ohne jegliche Optionen oder Konfiguration.

Aus der Readme-Datei:

Im Gegensatz zu Tools wie supervisor oder nodemon durchsucht es das Dateisystem nicht nach zu überwachenden Dateien. Stattdessen klinkt es sich in die require()-Funktion von Node ein, um nur die Dateien zu überwachen, die tatsächlich benötigt werden.

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