web-dev-qa-db-fra.com

Exécution d'une commande avec gulp pour démarrer le serveur Node.js

Donc, j'utilise gulp-exec ( https://www.npmjs.com/package/gulp-exec ) qui, après avoir lu une partie de la documentation, mentionne que si je veux exécuter une commande, je ne devrais utilisez le plugin et utilisez le code que j'ai essayé d'utiliser ci-dessous.

var    exec = require('child_process').exec;

gulp.task('server', function (cb) {
  exec('start server', function (err, stdout, stderr) {
    .pipe(stdin(['node lib/app.js', 'mongod --dbpath ./data']))
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
})

J'essaie de boire beaucoup pour démarrer mon serveur Node.js et MongoDB. C'est ce que j'essaie d'accomplir. Dans ma fenêtre de terminal, sa plainte à propos de mon

.pipe

Cependant, je suis novice et je pensais que c’est ainsi que vous passerez des commandes/tâches. Toute aide est appréciée, merci.

29
TryingToLearnJS
gulp.task('server', function (cb) {
  exec('node lib/app.js', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
  exec('mongod --dbpath ./data', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
    cb(err);
  });
})

Pour référence future et si quelqu'un d'autre rencontre ce problème.

Le code ci-dessus corrige mon problème. Donc, fondamentalement, j'ai découvert que ce qui précède est sa propre fonction et que, par conséquent, il n'est pas nécessaire de:

.pipe

Je pensais que ce code:

exec('start server', function (err, stdout, stderr) {

c’était le nom de la tâche que j’exécutais, c’est en fait la commande que j’exécuterai. Par conséquent, j'ai changé cela pour pointer vers app.js, qui exécute mon serveur, et faire de même pour pointer sur ma MongoDB.

MODIFIER

Comme @ N1mr0d mentionné ci-dessous avec l'absence de sortie serveur, une meilleure méthode pour exécuter votre serveur serait d'utiliser nodemon. Vous pouvez simplement exécuter nodemon server.js comme vous le feriez pour node server.js.

L'extrait de code ci-dessous correspond à ce que j'utilise dans ma tâche gulp pour exécuter mon serveur à l'aide de nodemon:

// start our server and listen for changes
gulp.task('server', function() {
    // configure nodemon
    nodemon({
        // the script to run the app
        script: 'server.js',
        // this listens to changes in any of these files/routes and restarts the application
        watch: ["server.js", "app.js", "routes/", 'public/*', 'public/*/**'],
        ext: 'js'
        // Below i'm using es6 arrow functions but you can remove the arrow and have it a normal .on('restart', function() { // then place your stuff in here }
    }).on('restart', () => {
    gulp.src('server.js')
      // I've added notify, which displays a message on restart. Was more for me to test so you can remove this
      .pipe(notify('Running the start tasks and stuff'));
  });
});

Lien pour installer Nodemon: https://www.npmjs.com/package/gulp-nodemon

40
TryingToLearnJS

Les options stdout/stderr de cette solution apparaissent lorsqu'elles se produisent et n'utilisent pas de bibliothèques tierces:

var spawn = require('child_process').spawn;

gulp.task('serve', function() {
  spawn('node', ['lib/app.js'], { stdio: 'inherit' });
});
8
pein-consulting.de

Vous pouvez également créer un coureur de tâches gulp node server comme ceci:

gulp.task('server', (cb) => {
    exec('node server.js', err => err);
});
1
radhey shyam