2015-12-05 2 views
5

Ich habe zwei Server-Skripte (beide sind auf socket.io angewiesen, laufen auf verschiedenen Ports).Gulp: Mehrere Node-Skripte parallel laufen lassen

Ich möchte beide parallel über Schluck starten. Aber ich hätte auch gerne die Möglichkeit, einen von ihnen zu stoppen. Und vielleicht greifen Sie sogar auf die Konsolenausgabe jedes Skripts zu.

Gibt es eine bestehende Lösung dafür? Oder würdest du überhaupt etwas anderes als Schluck empfehlen?

Antwort

3

fand ich eine Lösung, in der ich einen mongoDB Server zusätzlich starten:

var child_process = require('child_process'); 
var nodemon = require('gulp-nodemon'); 

var processes = {server1: null, server2: null, mongo: null}; 

gulp.task('start:server', function (cb) { 
    // The magic happens here ... 
    processes.server1 = nodemon({ 
     script: "server1.js", 
     ext: "js" 
    }); 

    // ... and here 
    processes.server2 = nodemon({ 
     script: "server2.js", 
     ext: "js" 
    }); 

    cb(); // For parallel execution accept a callback. 
      // For further info see "Async task support" section here: 
      // https://github.com/gulpjs/gulp/blob/master/docs/API.md 
}); 

gulp.task('start:mongo', function (cb) { 
    processes.mongo = child_process.exec('mongod', function (err, stdout, stderr) {}); 

    cb(); 
}); 

process.on('exit', function() { 
    // In case the gulp process is closed (e.g. by pressing [CTRL + C]) stop both processes 
    processes.server1.kill(); 
    processes.server2.kill(); 
    processes.mongo.kill(); 
}); 

gulp.task('run', ['start:mongo', 'start:server']); 
gulp.task('default', ['run']); 
+0

Ich bin offen für Vorschläge und bereit, das Häkchen zu besseren Lösungen zu geben. – tmuecksch

0

nodemon/foreverjs ist eine gute Lösung für nicht komplizierte Fälle, aber sie sind nicht so skalierbar wie pm2 ist. Also, wenn Sie eine skalierbare und zuverlässige Lösung wollen, würde ich empfehlen, pm2 zu verwenden. Es ist auch erwähnenswert, dass PM2 nach dem Start im Gegensatz zu foreverjs/nodemon dämmt. Es könnte ein Fehler oder eine Funktion für Sie sein und im Allgemeinen hängt von Ihren Bedürfnissen ab.

pm2 start script1.js 
pm2 start script2.js 
pm2 status // show status of running processes 
pm2 logs // tail -f logs from running processes