如何从另一个任务运行gulp任务?

Gaj*_*jus 53 gulp

我知道能够声明将在任务之前运行的依赖项,例如

gulp.task('a', () => {});
gulp.task('b', () => {});
gulp.task('c', ['a', 'c'], () => {});
Run Code Online (Sandbox Code Playgroud)

在调用任务'c'之后和执行任务'c'之前,每次都会运行任务'a'和'b'.

但是,如何以编程方式从一个内部调用任意任务gulp.task

Jef*_*ser 69

我是用gulp.start()做的; 像这样:

gulp.task('test1', function(){
  gulp.start('test2');
})

gulp.task('test2', function(){
  // do something
})
Run Code Online (Sandbox Code Playgroud)

如果重要的话,我正在使用gulp 3.9.1.看起来像gulp.start()可能被删除或弃用; 但它还没有发生.


更新 如果我要将内容分解为单独的函数,正如Novellizator建议的那样,它将是这样的:

function doSomething(){
  // do something
}

gulp.task('test1', function(){
  doSomething();
})

gulp.task('test2', function(){
  doSomething();
})
Run Code Online (Sandbox Code Playgroud)

它很简单,避免使用gulp.start().

  • gulp.start不是一个函数 (4认同)
  • @Tyguy7它最终被删除了吗? (3认同)
  • "将任务分解为功能,如果需要"从上述问题中获得建议,则将其重新用于其他任务 (2认同)

Dou*_*leA 9

从Gulp 4+起,我发现这可以很好地替代gulp.start:

const task1 = () => { /*do stuff*/ };
const task2 = () => { /*do stuff*/ };

// Register the tasks with gulp. They will be named the same as their function
gulp.task(task1);
gulp.task(task2);

...

// Elsewhere in your gulfile you can run these tasks immediately by calling them like this
(gulp.series("task1", "task2")());
// OR
(gulp.parallel("task1", "task2")());
Run Code Online (Sandbox Code Playgroud)


Jim*_*oll 7

关于"不要"的一般主题来自其他答案,这取决于你正在做什么.

如果你在想:

gulp.task("a", () => {
    doSomethingInstant()
    return doTaskB()
})
Run Code Online (Sandbox Code Playgroud)

你要:

gulp.task("meta-a", () => {
    doSomethingInstant()
})
gulp.task("a", ["meta-a", "b"])
Run Code Online (Sandbox Code Playgroud)

这是因为所有任务都是按顺序启动的,所以如果你没有在"meta-a"中做任何异步,它将在"b"开始之前完成.如果它是异步的,那么你需要更加明确:

gulp.task("meta-a", () => {
    return doSomethingAsync()
})
function taskB() {
    // Original task B code...
}
gulp.task("b", taskB)
gulp.task("a", ["meta-a"], taskB)
Run Code Online (Sandbox Code Playgroud)


Joh*_*Lee 6

在相关说明中,您可以使用gulp.seriesgulp.parallel在gulp v4中启动任务。尽管它不是的直接替代品gulp.start,但它可以达到相同的目的。

例:

v4之前

gulp.task('protractor', ['protractor:src']);
Run Code Online (Sandbox Code Playgroud)

v4之后

gulp.task('protractor', gulp.series('protractor:src'));
Run Code Online (Sandbox Code Playgroud)


小智 -6

有几种方法可以做到这一点:第一种:只需为另一个调用新的任务调用:

gulp.task('foo', function() {
  gulp.task('caller', ['bar']); // <- this calls the other existing task!
}
gulp.task('bar', function() {
  //do something
}
Run Code Online (Sandbox Code Playgroud)

第二个,不太干净的一个:Gulp 是 Javascript,所以你只需将几个指令设置为随机函数并调用它!

gulp.task('task', function() {
  recurrent_task();
}
gulp.task('task2', function() {
  recurrent_task();
}
function recurrent_task() {
  //do something
}
Run Code Online (Sandbox Code Playgroud)