如何在各个终端中生成多个gulp watch任务?

时间:2016-08-25 16:54:49

标签: javascript node.js gulp gulp-watch

我目前有三个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);
    });
});

2 个答案:

答案 0 :(得分:1)

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

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

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 () {
        // [...]
    });
});

答案 1 :(得分:0)

我认为,鉴于对this gulp.js project issue的弃用评论,我发现也许是一种非常规方式来解决这个问题,但所有测试表明这将按预期工作。我可以简单地拨打gulp.start(),我在gulp.js API docs中没有看到。嗯,对我来说似乎很好......

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

所有任务似乎都在单个终端实例中正确监听。我会接受的!