Задача 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 никогда не переходит к следующей задаче после этого.
Я что-то упустил?
Заранее спасибо за помощь!
Хорошо, я просто нашел решение для этого, и это смешно просто: использовать аргумент обратного вызова задачи следующим образом:
if (streams.length === taskNum) {
gUtil.log('the end!');
done();
}
Теперь это работает! И мне даже не пришлось использовать поток слияния в конце концов.
merge-stream
, но вы передаете ему массив потоков. Вы пробовалиreturn merge(...streams)
?