4

gulp-livereload私は自分のnodejsサーバーで作業しようとしています。gulp-nodemonファイルの変更後にサーバーを再起動するために使用していますが、これは機能します。livereload.reload()正しいタイミングで呼び出すことができません。

現在、(nodemon がスクリプトを開始するたびに)を呼び出しlivereload.reload()ています。これは機能しますが、数秒かかります。その理由は、nodemon が、スクリプトが呼び出されるに呼び出す nodejs スクリプトの実行を開始するためです。そのため、サーバーの準備ができていない状態でブラウザーが更新されます。.on('start'...gulpfile.jslivereload.listen() app.listen(port)

app.listen(port)特定のポートが使用されているかどうかを確認するために、nodejs nodemon スクリプトが呼び出されたか、またはリッスンしたかどうかをリッスンする方法はありますか?

私は小さな睡眠の問題を修正しましたが、それはとても間違っていて汚いと感じています.

4

2 に答える 2

5

読み取り可能なイベントを使用して、子プロセスの 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');
});
于 2015-04-09T06:39:15.727 に答える
1

これは、サーバーとプラグインに基づくシンプルでテスト済みのlivereload ソリューションの例です。connectconnect-livereloadgulp-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);
});

于 2015-04-19T13:58:15.007 に答える