Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在各自的终端中生成多个gulp watch任务?_Javascript_Node.js_Gulp_Gulp Watch - Fatal编程技术网

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

Javascript 如何在各自的终端中生成多个gulp watch任务?,javascript,node.js,gulp,gulp-watch,Javascript,Node.js,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

我目前有三项任务,即利用。它们本质上是基本的,并且被表示(简化)为

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.task('watch', function() {
    launchProcess('gulp watch:a');
    launchProcess('gulp watch:b');
    launchProcess('gulp watch:c');
});
然而,在我当前的工作流程中,我不得不打开三个终端,并分别启动它们


是否有一种方法可以代替一个“吞咽”任务,即在每个任务运行时生成三个独立的终端窗口?我已经研究过了,但还没有找到解决办法。理想情况下,我是在想象这样的事情

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.task('watch', function() {
    launchProcess('gulp watch:a');
    launchProcess('gulp watch:b');
    launchProcess('gulp watch:c');
});
其中
launchProcess
具有一些魔力,因此我可以将它们合并到一个命令中。我只是在这里寻找方便,因为可能有三个以上的过程。一想到要手动发射成吨的这些过程,我就畏缩不前


这是我最初的尝试,取自,但这(只是尝试启动一个观察者)并没有让我的观察者任务按预期工作-文件更改不会发生任何变化

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

我想我已经找到了一种非传统的方法来实现这一点,考虑到上面的反对意见,但是所有的测试都表明这将如预期的那样工作。我可以简单地调用
gulp.start()
,我在。嗯,我觉得很好

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

所有任务似乎都在一个终端实例中适当地侦听。我要了

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

如果你对此感到满意,下面的一行将与你的答案具有相同的效果。它还避免了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
语句,等待它们的其他任务将知道它们何时完成。我的三块手表组合的任务不会返回任何东西,所以你会丢失它(除非你使用类似的东西)。但是其他任务通常不依赖于监视任务的完成(因为它们是正在进行的任务,不会真正结束),因此在这种情况下,如果有意义的话,不返回流是可以的。