在gulp.series中使用del()

时间:2015-03-27 21:23:20

标签: javascript gulp

我尝试在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;
});

,但仍希望找到更好的解决方案。

3 个答案:

答案 0 :(得分:5)

您还可以将回调传递给clean任务以获取返回的流

var del = require('del');

gulp.task('clean', function(cb) {
    del(['output'], cb);
});

看看here

答案 1 :(得分:5)

gulp允许三种管理异步性的选项。首先,如果函数完成(不返回任何/未定义或简单值),gulp会认为任务已完成并继续。但是,如果您的任务是异步任务(尽管在节点中),那么您......

  1. 返回一个流。 return gulp.src(...).pipe(gulp.dest(...));注意返回值是一个流,因为gulp.src和.pipe返回流。
  2. 返回Promise
  3. 使用回调。如果你在函数的参数中放置一个变量,那么gulp会期望调用回调并等待它发生。将回调值作为参数赋予被认为是失败并且在没有值的情况下调用它被视为成功。
  4. 在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' ]);
}