Как вернуть все потоки сразу из задачи gulp с несколькими исходными файлами?

1

Задача gulp, которую я написал, ломает runSequence в моей основной задаче gulp. Он должен работать между другими задачами, например:

runSequence(
...
':build:prod:staticIndex',
':build:prod:typeDocToMD', // << this is my task
':build:prod:staticDocumentation',
...etc

И задача после него никогда не будет выполнена. Это заставляет меня думать, что моя задача не возвращает ни одного потока или делает это неправильно.

Вот как выглядит моя задача:

gulp.task(':build:prod:typeDocToMD', (done: any) => {
let taskNum: number = 0;
  let streams = [];
  let filesPath = [
    path.join(__CONFIG.TMPL_DOCS_PATH, '**/*.md')
  ];
  glob(filesPath.toString(), function (er, files) {
    taskNum = files.length - 1;
    files.forEach((filename) => {
      let stream = gulp.src(filename)
        .pipe(addTypedoc()) // << this is the custom plugin I wrote
        .pipe(gulp.dest(function (file) {
          return file.base;
        }));
      stream.on('end', () => {
        streams.push(stream);
        if (streams.length === taskNum) {
          gUtil.log('the end!');
          return merge(streams);
        }
      });
    });
  });
});

Поэтому я использовал glob для рекурсивного получения всех файлов md из папки. И я использовал поток слияния, чтобы объединить все потоки вместе и вернуть один.

Я получаю "конец!". сообщение, но gulp никогда не переходит к следующей задаче после этого.

Я что-то упустил?

Заранее спасибо за помощь!

  • 1
    Не знаком с merge-stream , но вы передаете ему массив потоков. Вы пробовали return merge(...streams) ?
  • 0
    Спасибо за ваш ответ, Дэвид! Это не помогло, но я нашел решение своей проблемы (см. Ниже).
Теги:
gulp
stream

1 ответ

0
Лучший ответ

Хорошо, я просто нашел решение для этого, и это смешно просто: использовать аргумент обратного вызова задачи следующим образом:

if (streams.length === taskNum) {
  gUtil.log('the end!');
  done();
}

Теперь это работает! И мне даже не пришлось использовать поток слияния в конце концов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню