Gulp观察node app.listen()何时被调用或端口(livereload、nodejs和Gulp)



我正在尝试让gulp-livereload与我的nodejs服务器一起工作。我使用gulp-nodemon在更改文件后重新启动服务器,这很有效。我在正确的时间调用livereload.reload()时遇到问题。

我当前正在gulpfile.js中的.on('start'...上调用livereload.reload()(每当我的节点启动脚本时)。这很有效,但需要几秒钟的时间。原因是当nodemon开始运行nodejs脚本时,它会在脚本调用app.listen(port)之前调用livereload.listen(),因此我的浏览器会在服务器未准备好的情况下刷新。

如果nodejs-nodemon脚本调用了app.listen(port),是否有方法进行监听,或者监听是否正在使用特定端口?

我已经通过少量睡眠解决了这个问题,但感觉太不对劲了。

使用可读事件监视子进程的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服务器和connect-livereloadgulp-livereload插件的Liverload解决方案的示例(如果有帮助的话):


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

相关内容

  • 没有找到相关文章

最新更新