2015-03-23 6 views
4

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

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

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

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

ответ

5

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

пример:

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

Это то, что я искал! Спасибо! – Erandros

1

Вот пример simple and tested livereload solution на основе 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); 
}); 
 

 Смежные вопросы

  • Нет связанных вопросов^_^