web-dev-qa-db-ja.com

gulpでコマンドを実行してNode.jsサーバーを起動する

だから私はgulp-exec( https://www.npmjs.com/package/gulp-exec )を使用しています。プラグインを使用して、以下で使用しようとしたコードを使用しないでください。

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);
  });
})

Node.jsサーバーとMongoDBを起動するためにgulpを取得しようとしています。これは私が達成しようとしていることです。私のターミナルウィンドウで、

.pipe

しかし、私はgulpが初めてであり、それがコマンド/タスクを通過する方法だと思った。どんな助けも感謝します、ありがとう。

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);
  });
})

将来の参考のために、そして誰かがこの問題に出くわした場合。

上記のコードは私の問題を修正しました。だから基本的に、私は上記がそれ自身の機能であり、したがって必要がないことを発見した:

.pipe

このコードは:

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

私が実行しているタスクの名前でしたが、実際に実行するコマンドです。したがって、サーバーを実行するapp.jsを指すようにこれを変更し、MongoDBを指すように同じことを行いました。

[〜#〜] edit [〜#〜]

@ N1mr0dがサーバー出力を持たずに以下で言及するように、サーバーを実行するためのより良い方法は、nodemonを使用することです。 nodemon server.jsを実行するのと同じように、単にnode server.jsを実行できます。

以下のコードスニペットは、nodemonを使用してサーバーを実行するためにgulpタスクで使用するものです。

// 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'));
  });
});

Nodemonをインストールするためのリンク: https://www.npmjs.com/package/gulp-nodemon

40
TryingToLearnJS

このソリューションには、発生時にstdout/stderrが表示され、サードパーティのライブラリは使用されません。

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

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

次のようなgulpノードサーバータスクランナーを作成することもできます。

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