在服务器进程完成重新启动之前重新加载 gulp-livereload

Posted

技术标签:

【中文标题】在服务器进程完成重新启动之前重新加载 gulp-livereload【英文标题】:gulp-livereload reloading before server process finishes restarting 【发布时间】:2014-10-03 01:02:18 【问题描述】:

我正在配置我的gulp.js gulpfile 来监视我的目录中的文件更改,并且 1) 重新加载我的快速服务器和 2) 发出 livereload "change" 事件,以便我的浏览器(带有 LiveReload chrome 扩展)将重新加载我正在开发的页面。

这是我的 gulpfile:

var gulp = require('gulp')
  , nodemon = require('gulp-nodemon')
  , livereload = require('gulp-livereload');

gulp.task('startReloadServer', function() 
  livereload.listen();
);

gulp.task('demon', function () 
  nodemon(
    script: 'server.js',
    ext: 'js html',
    env: 
      'NODE_ENV': 'development'
    
  )
    .on('start', ['startReloadServer'])
    .on('restart', function () 
      console.log('restarted!');
      livereload.changed();
    );
);

gulp.task('default', ['demon']);

然而,当我对其中一个视图 (.html) 文件进行更改时,我的浏览器会在节点服务器进程有机会重新联机之前重新加载页面:

如何更改我的 gulpfile 以在 nodemon 准备好接收请求后发出 livereload.changed() 事件?

【问题讨论】:

【参考方案1】:

我发现了类似的问题,然后我写了我的解决方案。Gulp to watch when node app.listen() is invoked or to port (livereload, nodejs and gulp)

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

【讨论】:

【参考方案2】:

我也遇到了这个问题。我能想到的最好办法就是将呼叫livereload.changed() 延迟一秒钟。

nodemon.on('restart', function() 
  setTimeout(livereload.changed, 1000);
);

文档:setTimeout

【讨论】:

以上是关于在服务器进程完成重新启动之前重新加载 gulp-livereload的主要内容,如果未能解决你的问题,请参考以下文章

Supervisor重新加载配置启动新的进程

带有 fetchedResultsController 的 Tableview 在应用重新启动或视图重新加载之前不会更新新内容

Supervisor重新加载配置启动新的进程

使用Nginx命令启动,停止和重新加载Nginx

在没有重新加载活动/布局之前启动活动

Azure alwaysOn 未在服务器重新启动时加载 MEAN 应用程序