Подтвердить что ты не робот

Запуск команды с 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);
  });
})

Я пытаюсь запустить gulp для запуска моего сервера Node.js и MongoDB. Это то, что я пытаюсь выполнить. В моем терминальном окне его жалобы на мои

.pipe

Однако я новичок в gulp, и я подумал, что так вы проходите через команды/задачи. Любая помощь приветствуется, спасибо.

4b9b3361

Ответ 1

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.

ИЗМЕНИТЬ

Как @N1mr0d, упомянутый ниже, без сервера, лучшим способом запуска вашего сервера будет использование nodemon. Вы можете просто запустить nodemon server.js, как вы бы запускали node server.js.

Ниже приведен фрагмент кода, который я использую в своей задаче gulp для запуска моего сервера с помощью 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'));
  });
});

Ссылка для установки Nodemon: https://www.npmjs.com/package/gulp-nodemon

Ответ 2

Это решение имеет stdout/stderr, показанный по мере их появления, и не использует сторонние библиотеки:

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

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