Просматривать, когда вызывается узел app.listen() или портировать (livereload, nodejs и gulp).

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

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

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

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

2 ответа

Решение

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

пример:

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

Вот пример простого и проверенного решения для livereload, основанного на connect сервер и 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);
});
Другие вопросы по тегам