有关管道内部条件任务的信息过多(例如“ gulp-if”插件)。但是,实际上它不是“条件任务”:它是“条件插件用法”,并且一个任务可以使用多个插件。以下是有条件地在管道内(例如,在gulp.paralell()
内)运行任务的方法
假设任务名称可以包含用于提供易于理解的任务含义的空格。
gulp.task('Build', gulp.paralell(
'Preprocess HTML',
'Prepeocess styles',
done => {
if(checkSomeCondition()){
runTask('some Task') // but how?
}
else {
done();
}
}
))
答案 0 :(得分:1)
gulp4.0的优点在于您的任务只能是函数,因此可以进行以下工作:
gulp.task('Preprocess HTML', function () {
console.log("in Preprocess HTML");
return gulp.src('./');
});
您可以使用以上版本(“旧方法”)或更新版本 在下面。
我在这里展示了两个同时使用这两个版本的任务,但我个人不会将它们混在一起。
// function PreprocessHTML() {
// console.log("in Preprocess HTML");
// return gulp.src('./');
// }
function PreprocessStyles() {
console.log("in Preprocess styles");
return gulp.src('./');
}
function testTaskTrue() {
console.log("in testTaskTrue");
return gulp.src('./');
}
function testTaskFalse() {
console.log("in testTaskFalse");
return gulp.src('./');
}
function checkSomeCondition() {
console.log("in checkSomeCondition");
return false;
}
// Again, I definitely wouldn't mix the two versions of tasks as shown below.
// Just here for demonstration purposes.
gulp.task('test', gulp.parallel( 'Preprocess HTML', PreprocessStyles,
done => {
if (checkSomeCondition()) {
// so testTaskTrue can be any gulp4.0 task, easy to call since it just a function
testTaskTrue();
}
else {
testTaskFalse();
}
done();
}
));
答案 1 :(得分:1)
对于gulp 4,首先创建此辅助函数:
function gulpTaskIf(condition, task) {
task = gulp.series(task) // make sure we have a function that takes callback as first argument
return function (cb) {
if (condition()) {
task(cb)
} else {
cb()
}
}
}
gulp.parallel()
或gulp.series()
接受的参数相同,即字符串,函数引用或来自另一个{{1}的返回值}或gulp.parallel()
。gulp.series()
或gulp.task()
调用的参数传递给gulp.parallel()
。示例(第一个匹配问题):
gulp.series()
gulp.task('Build', gulp.parallel(
'Preprocess HTML',
'Prepeocess styles',
runTaskIf(checkSomeCondition, 'some Task')
))
function myTask() {
return gulp.src(...)
...
.dest(...)
}
gulp.task('my-task', myTask)
gulp.task('default', gulpTaskIf(
function () {
return Math.random() < 0.5; // example condition
},
'my-task')
function myTask() {
return gulp.src(...)
...
.dest(...)
}
gulp.task('default', gulpTaskIf(() => Math.random() < 0.5, myTask)
答案 2 :(得分:0)