我知道能够声明将在任务之前运行的依赖项,例如
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 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)
关于"不要"的一般主题来自其他答案,这取决于你正在做什么.
如果你在想:
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)
在相关说明中,您可以使用gulp.series
或gulp.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)