我尝试在gulp 4
中启动任务之前清理文件夹var gulp = require('gulp');
var del = require('del');
gulp.task('clean', function() {
del.sync('folder/*');
});
gulp.task('foo', gulp.series('clean', 'something'));
它不起作用,因为'clean'
任务必须返回一些流。我找到了解决方法:
gulp.task('clean', function() {
del.sync('folder/*');
var emptyStream = gulp.src([]).pipe(gulp.dest('/'));
return emptyStream;
});
,但仍希望找到更好的解决方案。
答案 0 :(得分:5)
您还可以将回调传递给clean任务以获取返回的流
var del = require('del');
gulp.task('clean', function(cb) {
del(['output'], cb);
});
看看here
答案 1 :(得分:5)
gulp允许三种管理异步性的选项。首先,如果函数完成(不返回任何/未定义或简单值),gulp会认为任务已完成并继续。但是,如果您的任务是异步任务(尽管在节点中),那么您......
return gulp.src(...).pipe(gulp.dest(...));
注意返回值是一个流,因为gulp.src和.pipe返回流。在del的情况下,它没有做前两个但是接受一个回调,它处理与上面的场景3相同。
gulp.task('clean', function(done) {
del(['output'], done);
});
以下是使用手动调用回调的示例:
gulp.task('foo', function(done) {
gulp.src('input')
.pipe(gulp.dest('output'))
.on('end', function() {
done();
})
.on('error', function(err) {
done(err);
});
});
由于流是如此常见,因此返回后会为您执行上述操作。 (注意done
已被删除,因此gulp不会期望它被调用。
gulp.task('foo', function() {
return gulp.src('input')
.pipe(gulp.dest('output'));
});
并非所有内容都可以成为流,并且回调可能令人畏惧,因此您可以返回承诺:
gulp.task('foo', function() {
return new Promise(function(resolve) {
setTimeout(resolve, 5000);
});
});
答案 2 :(得分:1)
直接来自gulp 4.0 samples,只需返回del promise:
function clean() { // You can use multiple globbing patterns as you would with `gulp.src`, // for example if you are using del 2.0 or above, return its promise return del([ 'assets' ]); }