2017-09-13 31 views
1

我写的吞噬任务在我的主要任务中破坏了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); 
     } 
     }); 
    }); 
    }); 
}); 

所以我用水珠从文件夹中递归得到所有MD文件。我用merge-stream将所有流合并在一起并返回一个。

我得到'结束!'消息记录,但吞咽之后从未到达下一个任务。

我在这里错过了什么吗?

在此先感谢您的帮助!

+1

不熟悉'merge-stream',但是你正在向它传递一组数据流。你尝试'返回合并(...流)'? – DavidDomain

+0

谢谢你的回复,大卫!它没有帮助,但我找到了解决我的问题的办法(见下文)。 – williwaw

回答

0

OK,我只是找到了解决这个,这是可笑的简单:使用任务的回调参数是这样的:

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

现在,它的作品!毕竟,我甚至不必使用合并流。

相关问题