2016-08-25 48 views
1

我目前有三個吞嚥任務,利用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() { 
     // [...] 
    }); 
}); 

不過,我目前的工作流程,我不得不打開三個終端,並單獨解僱他們。


有沒有一種方法可以讓我們有一個吞噬任務,它產生三個獨立的終端窗口,每個任務運行?我已經查看了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); 
    }); 
}); 

回答

0

你自己的解決方案並不是我對你的問題所期望的,因爲正如你所說的那樣,它不會打開新的終端標籤或任何東西。

如果您對此感到滿意,下面的行將與您的答案具有相同的效果。它也避免了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() { 
     // [...] 
    }); 
}); 
+0

我喜歡單線。也許我很困惑,但我認爲這些掛起的監視任務需要在他們自己的獨立實例中運行,但我很高興看到它按預期工作。我會接受你的答案,因爲它更清潔。是的,這是我之後的行爲,因爲我認爲我*需要*單獨的終端(標籤),但我沒有看到這種約束。如果產卵終端窗口是可能的,仍然會喜歡知道它仍然在逃避我。歡呼聲 – scniro

+0

手錶不一定非要在自己的任務中。通常分離任務以清楚地返回每個流都是很好的。由於你的手錶都有'return'語句,等待他們的其他任務將知道它們何時完成。我的三個手錶加在一起的任務不會返回任何東西,所以你會失去它(除非你使用[merge-stream](https://www.npmjs.com/package/merge-stream))。但是,其他任務通常不依賴於完成監視任務(因爲它們是正在進行的任務並不真正結束),所以在這種情況下,如果有意義的話,不返回流是很好的。 – MadScone

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

所有的任務似乎都在單個終端實例中正確收聽。我要買它!