如何在各个终端中生成多个 gulp 监视任务?
How can I spawn multiple gulp watch tasks in respective terminals?
我目前有三个 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 任务,每个任务 运行 生成三个独立的终端 windows?我调查了 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);
});
});
考虑到 this gulp.js project issue, but all testing indicates this will work as expected. I can simply call gulp.start()
, which, I do not see in the gulp.js API docs 上的弃用评论,我想我可能找到了一种非常规的方法来实现这一点。嗯,我觉得不错...
gulp.task('watch', function() {
gulp.start('watch:a');
gulp.start('watch:b');
gulp.start('watch:c');
});
所有任务似乎都在单个终端实例中适当地侦听。我要了!
你自己的解决方案并不是我对你问题的预期,因为正如你自己所说,它不会打开新的终端选项卡或任何东西。
如果您对此感到满意,下一行将与您的回答具有相同的效果。它还避免了 gulp.start()
,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 () {
// [...]
});
});
我目前有三个 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 任务,每个任务 运行 生成三个独立的终端 windows?我调查了 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);
});
});
考虑到 this gulp.js project issue, but all testing indicates this will work as expected. I can simply call gulp.start()
, which, I do not see in the gulp.js API docs 上的弃用评论,我想我可能找到了一种非常规的方法来实现这一点。嗯,我觉得不错...
gulp.task('watch', function() {
gulp.start('watch:a');
gulp.start('watch:b');
gulp.start('watch:c');
});
所有任务似乎都在单个终端实例中适当地侦听。我要了!
你自己的解决方案并不是我对你问题的预期,因为正如你自己所说,它不会打开新的终端选项卡或任何东西。
如果您对此感到满意,下一行将与您的回答具有相同的效果。它还避免了 gulp.start()
,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 () {
// [...]
});
});