Использование del в gulp.series()

Вопрос:Я пытаюсь очистить папку перед запуском задач в 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 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 позволяет три варианта управления асинхронностью. Во-первых, если функция завершена (возвращает ничего / undefined или простое значение), gulp считает, что задача выполнена и движется дальше. Однако, если ваша задача – асинхронная задача (как много в node), тогда вы…

  • Возврат потока. return gulp.src(…).pipe(gulp.dest(…)); обратите внимание, что возвращаемое значение является потоком, поскольку gulp.src и .pipe возвращают потоки.
  • Верните Promise.
  • Использовать обратный вызов. если вы поместите переменную в аргумент функции, тогда 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’)); });

Не все может быть потоком, а обратные вызовы могут быть сложными для управления, поэтому вы можете вместо этого пообещать:

gulp.task(‘foo’, function() { return new Promise(function(resolve) { setTimeout(resolve, 5000); }); }); Ответ №1

вы также можете передать обратный вызов для очистки задачи, чтобы вернуть поток

var del = require(‘del’); gulp.task(‘clean’, function(cb) { del([‘output’], cb); });

посмотрите здесь

Ответ №2

Непосредственно из gulp 4.0 образцов просто верните обещание del:

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’ ]); }

Оцените статью
Добавить комментарий