如何检查gulp任务是否正在运行?

时间:2017-03-01 20:05:44

标签: node.js gulp development-environment livereload

我正在使用gulp-server-livereload运行开发livereload服务器。这是gulpfile.js中的default任务

var gulp = require('gulp');
var server = require('gulp-server-livereload');

gulp.task('default', function() {
  gulp.src(basePath)
    .pipe(server({
      livereload: true,
      host: domain,
      port: 80,
    }));
});

然后还有另一个任务gulp export,它需要这个正在运行的Web服务器。如果我启动另一个它会出错(因为端口80和35729正忙)。所以我想要的逻辑就是:

如果gulp default已在运行,请直接进入nightmare.js任务
否则启动服务器并继续执行nightmare.js任务

所以我的问题是我不知道检查gulp任务是否正在运行的强大方法

我可以用一些Gulp方法吗?或者从Node级别? 我不想检查开放端口或网络服务器地址作为"是的默认任务正在运行"如果可能的话。

1 个答案:

答案 0 :(得分:0)

Can I do that with some Gulp method? Or from the level of Node? I wouldn't like to check open ports or webserver address as a proxy for "yes default task is running" if at all possible.

I have found no gulp way so far, so here is checking for ports busy. If they are it infers the server is running and proceeds with the export tasks, if not it starts a server.

var server = require('gulp-server-livereload');

gulp.task('export', function () {

  var net = require('net');

  var portFree = function(port, callback) {
    var server = net.createServer(function(socket) {
      socket.write('Echo server\r\n');
      socket.pipe(socket);
    });

    server.listen(port, '127.0.0.1');
    server.on('error', function (e) {
      callback(false);
    });
    server.on('listening', function (e) {
      server.close();
      callback(true);
    });
  };

  portFree(35729, function(returnValue) {
    // If server isn't already running, start it.
    if(returnValue) {
      gulp.src(basePath)
      .pipe(server({
        livereload: true,
        host: 'http://localhost'
      }));
    }
  });

  // Do the actual export tasks...
});
相关问题