在节点app.listen()被调用或端口(livereload,nodejs和gulp)

我正在尝试将gulp-livereload与我的nodejs服务器配合使用。 我使用gulp-nodemon在文件发生更改后重新启动服务器,这是有效的。 我有麻烦在正确的时间调用livereload.reload()

我正在调用livereload.reload() .on('start'...在我的gulpfile.js (每当我的nodemon启动一个脚本时)的gulpfile.js ()。这个工作,但它需要几秒钟。原因是当nodemon开始运行nodejs脚本,在脚本调用app.listen(port) livereload.listen() 之前调用app.listen(port) ,这样我的浏览器就不需要准备好服务器就刷新了。

有没有一种方法来侦听nodejs nodemon脚本是否调用了app.listen(port)或者是侦听是否正在使用特定的端口?

我已经解决了一个小睡眠的问题,但它只是感觉非常错误和肮脏。

使用可读的事件来监视subprocess的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'); }); 

下面是一个基于connect server和connect-livereloadgulp-livereload插件的简单且经过testing的 livereload解决scheme的例子,如果有任何帮助的话:

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