我意识到能够声明将在任务之前运行的依赖关系,例如,如何从其他任务运行吞噬任务?
gulp.task('a',() => {});
gulp.task('b',() => {});
gulp.task('c', ['a', 'c'],() => {});
任务'c'被调用后,任务'c'执行前,每次运行任务'a'和'b'。
但是,如何以编程方式从gulp.task
内调用任意任务?
我意识到能够声明将在任务之前运行的依赖关系,例如,如何从其他任务运行吞噬任务?
gulp.task('a',() => {});
gulp.task('b',() => {});
gulp.task('c', ['a', 'c'],() => {});
任务'c'被调用后,任务'c'执行前,每次运行任务'a'和'b'。
但是,如何以编程方式从gulp.task
内调用任意任务?
有几个方法可以做到这一点: 第一招:只调用一个新的任务,呼吁其他:
gulp.task('foo', function() {
gulp.task('caller', ['bar']); // <- this calls the other existing task!
}
gulp.task('bar', function() {
//do something
}
第二,少清洁剂之一:咕嘟咕嘟是JavaScript,因此你只设置一些指令作为一个随机函数,然后调用它!
gulp.task('task', function() {
recurrent_task();
}
gulp.task('task2', function() {
recurrent_task();
}
function recurrent_task() {
//do something
}
我使用gulp.start();像这样:
gulp.task('test1', function(){
gulp.start('test2');
})
gulp.task('test2', function(){
// do something
})
我在使用gulp 3.9.1如果它很重要。看起来像gulp.start()可能会被删除或弃用;但还没有发生。
更新 如果我要打破东西分成不同的功能,如Novellizator建议,这将是这样的:
function doSomething(){
// do something
}
gulp.task('test1', function(){
doSomething();
})
gulp.task('test2', function(){
doSomething();
})
这是简单,避免使用大口的。开始()。
“将任务分解为函数,然后在其他任务中重用它们,如果需要”上述问题的一条建议 – Novellizator
我刚安装了gulp并且此方法适用于我。但我会列出下面讨论的替代方案。 – Callat
谢谢你节省了我的时间;它为我工作得很好! –
正如JeffryHouser所述,使用以下方法工作但已被弃用,并将在未来版本中删除。我只是在3.9.1上尝试了以下内容,它工作正常。
代码:
// Variables
var gulp = require('gulp');
var less = require('gulp-less');
var watch = require('gulp-watch');
// Task to compile less -> css: Method 1- The bad way
gulp.task('default', function(){
gulp.src('src/*.less')
gulp.start('lessToCss');
});
gulp.task('lessToCss', function() {
gulp.src('src/*.less')
.pipe(less())
.pipe(gulp.dest('src/main.css'));
});
由Novellizator的评论中提到的第二种方式是:
“破任务伸到功能,然后再用他们在其他任务,如果你需要”一片从上述问题的建议
我使用lazypipe()https://www.npmjs.com/package/lazypipe
的做到这一点代码:
// Variables
var gulp = require('gulp');
var less = require('gulp-less');
var watch = require('gulp-watch');
var lazypipe = require('lazypipe');
var fixMyCSS = lazypipe()
.pipe(less); // Be CAREFUL here do not use less() it will give you an errror
// Task to compile less -> css: Method 2 - The nice way
gulp.task('default', function(){
//gulp.start('lessToCss');
gulp.src('src/*.less')
.pipe(fixMyCSS())
.pipe(gulp.dest('src/main.css'));
});
简略比较
方法1,得到以下:
对于总的61毫秒完成
方法2? - [23时03分24秒]启动 '默认' ...... - [23时03分24秒]后38毫秒
成品 '默认' 几乎一半在38毫秒
对于总差价23毫秒
现在为什么会出现这种情况?老实说,我不知道怎么说,但是让我们说方法2显然更具可读性,可维护性,甚至更快的选择。
只要您明白不要直接在lazypipe()
内调用流,它们都易于编写。
这对@ Novellizator的评论比我的介绍更复杂。我修改了我的答案,以包含一种替代方法。单独评估性能统计数据非常困难,尤其是在您运行的代码不同的情况下。如果lessToCss使用增量方法,则预计第二次运行会比第一次更快。 – JeffryHouser
关于其他答案中的“不要”的一般主题,这取决于你在做什么。
如果你想:
gulp.task("a",() => {
doSomethingInstant()
return doTaskB()
})
你想:
gulp.task("meta-a",() => {
doSomethingInstant()
})
gulp.task("a", ["meta-a", "b"])
这工作,因为所有的任务,以便开始,所以如果你没有做任何事情异步在“元-a“,它会在”b“开始之前结束。如果它是异步的,那么你需要更加明确:
gulp.task("meta-a",() => {
return doSomethingAsync()
})
function taskB() {
// Original task B code...
}
gulp.task("b", taskB)
gulp.task("a", ["meta-a"], taskB)
只是我或者这根本行不通? – Tomasz
第一个不起作用 – StingyJack
第一个建议只是注册一个吞咽任务,但没有回调函数,所以是的,它不会工作。 – joeycozza