【问题标题】:How can I spawn multiple gulp watch tasks in respective terminals?如何在各自的终端中生成多个 gulp watch 任务?
【发布时间】:2016-08-25 16:54:48
【问题描述】:

我目前有三个 gulp 任务,利用 gulp-watch。它们本质上是基本的,并且被表示(简化)......

var gulp = require('gulp');
var watch = require('gulp-watch');

gulp.task('watch:a', function() {
    return watch('a/**/*.js', function () {
        // [...]
    });
});

gulp.task('watch:b', function() {
    return watch('b/**/*.js', function () {
        // [...]
    });
});

gulp.task('watch:c', function() {
    return watch('c/**/*.js', function () {
        // [...]
    });
});

但是,按照我目前的工作流程,我不得不打开三个终端,然后分别将它们关闭。


有没有办法让我拥有一个 gulp 任务,它会生成三个单独的终端窗口,每个任务都在运行?我研究了child process,但无法制定解决方案。理想情况下,我正在想象这样的事情......

gulp.task('watch', function() {
    launchProcess('gulp watch:a');
    launchProcess('gulp watch:b');
    launchProcess('gulp watch:c');
});

launchProcess 有一些魔力,所以我可以将它们整合到一个命令中。我只是在这里寻找方便,因为可能有三个以上的进程。一想到要手动关闭大量这些过程,我就感到畏缩。


这是我最初的尝试,取自 Answer: Gulp – How Can I Open A New Tab In Terminal?,但这(只是试图解雇一个观察者)并没有让我的观察者任务按预期工作 - 文件更改没有任何反应。

var exec = require('child_process').exec;

gulp.task('watch', function(cb) {

    exec('gulp watch:a', function (err, stdout, stderr) {
        console.log(stdout);
        console.log(stderr);
        cb(err);
    });
});

【问题讨论】:

    标签: javascript node.js gulp gulp-watch


    【解决方案1】:

    您自己的解决方案并不是我对您的问题的期望,因为正如您自己所说,它没有打开新的终端选项卡或任何东西。

    如果您对此感到满意,以下行将与您的答案具有相同的效果。它还避免了gulp.start(),Gulp 的作者不建议使用它。

    gulp.task('watch', ['watch:a', 'watch:b', 'watch:c']);
    

    或者,如果可能的话,您可以随时组合您的观看任务,如下所示。尽管如果您想这样做,那么您将失去单独运行这些任务的能力。

    gulp.task('watch', function() {
        watch('a/**/*.js', function () {
            // [...]
        });
    
        watch('b/**/*.js', function () {
            // [...]
        });
    
        watch('c/**/*.js', function () {
            // [...]
        });
    });
    

    【讨论】:

    • 我喜欢单线。也许我很困惑,但我一度认为这些挂表任务需要在它们自己的单独实例中运行,但我很高兴看到它按预期工作。我会接受你的回答,因为它更干净。是的,这是我所追求的行为,因为我认为我 需要 单独的终端(选项卡)但我没有看到这种约束。仍然很想知道是否可以生成终端窗口,那个窗口仍然在逃避我。干杯
    • 手表不一定非得在他们自己的任务中。 通常最好将任务分开以干净地从每个任务返回流。由于您的手表都有return 语句,等待它们的其他任务将知道它们何时完成。我的三块手表组合的任务没有返回任何东西,所以你失去了它(除非你使用像merge-stream 这样的东西)。但是其他任务通常不依赖于监视任务的完成(因为它们是不会真正结束的持续任务)所以在这种情况下不返回流是可以的,如果这有意义的话。
    【解决方案2】:

    鉴于this gulp.js project issue 上的弃用 cmets,我想我可能找到了一种非常规的方法来实现这一目标,但所有测试都表明这将按预期工作。我可以简单地调用gulp.start(),这在gulp.js API docs 中没有看到。嗯,我觉得不错……

    gulp.task('watch', function() {
        gulp.start('watch:a');
        gulp.start('watch:b');
        gulp.start('watch:c');
    });
    

    所有任务似乎都在单个终端实例中进行了适当的侦听。我会接受的!

    【讨论】:

      猜你喜欢
      • 2015-03-11
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-14
      • 1970-01-01
      相关资源
      最近更新 更多