Gulp для наблюдения за вызовом node app.listen() или для переноса (livereload, nodejs и gulp)

Я пытаюсь заставить gulp-livereload работать с моим сервером nodejs. Я использую gulp-nodemon для перезапуска сервера после изменений в файлах, это работает. У меня возникли проблемы с вызовом livereload.reload() в нужное время.

В настоящее время я вызываю livereload.reload() на .on('start'... в моем gulpfile.js (всякий раз, когда мой нодмон запускает скрипт). Это работает, но занимает несколько секунд. Причина в том, что когда nodemon запускает скрипт nodejs, он вызывает livereload.listen() до того, как скрипт вызвал app.listen(port), поэтому мой браузер обновляется без готовности сервера.

Есть ли способ прослушать, вызвал ли скрипт nodemon nodejs app.listen(port) или, возможно, прослушать, чтобы увидеть, используется ли определенный порт?

Я исправил проблему с небольшим сном, но он кажется таким неправильным и грязным.


person basickarl    schedule 23.03.2015    source источник


Ответы (2)


Используйте читаемое событие для мониторинга stdout дочернего процесса.

пример:

nodemon({script: 'app.js',
         nodeArgs: ['--harmony'],
         stdout: false})
    .on('readable', function(data) {
        this.stdout.on('data', function(chunk) {
            if (/koa server listening/.test(chunk)) {
                console.log('livereload');
                livereload.reload();
            }
            process.stdout.write(chunk);
        });
        this.stderr.pipe(process.stderr);
    });

app.js

app.listen(3000, function(err) {
    console.log('koa server listening');
});
person Daishi Nakajima    schedule 09.04.2015
comment
Это было то, что я искал! Огромное спасибо! - person erandros; 30.12.2015

Вот пример простого и проверенного решения для прямой загрузки на основе connect server и плагины connect-livereload и gulp-livereload, если это поможет:


var gulp = require('gulp');
var connect = require('connect');
var connectLivereload = require('connect-livereload');
var opn = require('opn');
var gulpLivereload = require('gulp-livereload');

var config = {
    rootDir: __dirname,
    servingPort: 8080,

    // the files you want to watch for changes for live reload
    filesToWatch: ['*.{html,css,js}', '!Gulpfile.js']
}

// The default task - called when you run `gulp` from CLI
gulp.task('default', ['watch', 'serve']);

gulp.task('watch', ['connect'], function () {
  gulpLivereload.listen();
  gulp.watch(config.filesToWatch, function(file) {
    gulp.src(file.path)
      .pipe(gulpLivereload());
  });
});

gulp.task('serve', ['connect'], function () {
  return opn('http://localhost:' + config.servingPort);
});

gulp.task('connect', function(){
  return connect()
    .use(connectLivereload())
    .use(connect.static(config.rootDir))
    .listen(config.servingPort);
});

person Dmitri Zaitsev    schedule 19.04.2015