如何从一个带有多个源文件的gulp任务一次返回所有的stream?
我写的一口气的任务打破了我的主要任务中的runSequence。 它必须在其他任务之间运行,如下所示:
runSequence( ... ':build:prod:staticIndex', ':build:prod:typeDocToMD', // << this is my task ':build:prod:staticDocumentation', ...etc
而它之后的任务从未被执行。 这使我认为我的任务不会返回一个单一的stream或不正确。
这是我的任务看起来如何:
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从文件夹中recursion地获取所有的md文件。 我使用合并stream将所有stream合并在一起,并返回一个。
我得到了'结束!' 消息logging,但吞噬之后永远不会到达下一个任务。
我在这里错过了什么?
在此先感谢您的帮助!
好的,我只是find了一个解决scheme,这很简单:使用任务的callback参数是这样的:
if (streams.length === taskNum) { gUtil.log('the end!'); done(); }
现在它工作! 毕竟我甚至不需要使用合并stream。