javascript - 在 gulp.series() 中使用 del

标签 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;
});

,但还是希望能找到更好的解决方案。

最佳答案

gulp 允许三个选项来管理异步性。首先,如果一个函数完成(没有返回任何东西/未定义,或一个简单的值)gulp 认为任务完成并继续前进。但是,如果您的任务是一个异步任务(在节点中也是如此),那么您...

  1. 返回一个流。 return gulp.src(...).pipe(gulp.dest(...)); 注意返回值是一个流,因为 gulp.src 和 .pipe 返回流。
  2. 返回 Promise .
  3. 使用回调。如果你在函数的参数中放置一个变量,那么 gulp 将期望回调被调用并等待它发生。为回调提供一个值作为参数被视为失败,而在没有值的情况下调用它被视为成功。

在 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'));
});

并非所有内容都可以成为流,回调管理起来可能令人望而生畏,因此您可以返回一个 promise :

gulp.task('foo', function() {
  return new Promise(function(resolve) {
    setTimeout(resolve, 5000);
  });
});

关于javascript - 在 gulp.series() 中使用 del,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29310425/

相关文章:

javascript - 如何处理包装 View 或 View Controller 中 Ember 组件的操作 "sent"?

javascript - jQuery 检查 localStorage 以及如果为空/null 则刷新元素

javascript - Bootstrap - 模态 - 访问父对象的值

node.js - 使用 Visual Studio 时可以在不同文件之间拆分 gulp 任务吗?

node.js - gulp 将任务合并到默认命令中

javascript - 如何设置所有选择/选择下拉菜单

javascript - 使用 Gulp 为每个模块/目录创建 Angular $templateCache

sass - gulp minify-css清除scss文件中的注释

javascript - createWriteStream 后 gulp-open 不起作用

javascript - 如何根据封面照片的 div 高度和位置调整图像大小?