在产生subprocess时pipe理Gulp依赖关系

我有一个产生一个jekyll孩子过程的吞咽任务。 它将我的标记编译到_site中的html文件中。

我有另一个任务,这个任务作为一个依赖,因为它执行生成的HTML的一些后处理。 然而,它触发得太早 – 因为看起来subprocess并不影响依赖pipe理

我如何确保html始终在jekyll之后运行 – 最好不要使用:

 jekyll.on('exit', function (code, signal) { gulp.run('html'); }); 

任务:

 gulp.task('jekyll', ['scripts', 'styles'], function () { var spawn = require('child_process').spawn; var jekyll = spawn('jekyll', ['build', '--config', 'app/markdown/_config.yml', '--trace'], {stdio: 'inherit'}); }); gulp.task('html', ['jekyll'] function () { return gulp.src('_site/*.html') .pipe($.useref.assets()) }); 

改变你的jekyll任务, 包括一个asynchronouscallback ,如下所示:

 gulp.task('jekyll', ['scripts', 'styles'], function (gulpCallBack) { var spawn = require('child_process').spawn; var jekyll = spawn('jekyll', ['build', '--config', 'app/markdown/_config.yml', '--trace'], {stdio: 'inherit'}); jekyll.on('exit', function(code) { gulpCallBack(code === 0 ? null :'ERROR: Jekyll process exited with code: '+code'); }); }); 

所有改变都是将callback函数参数添加到任务函数的签名中,并监听生成的进程上的exit事件以处理callback。

现在,当Jekyll进程退出时,可以通知大家。 使用退出代码将允许您捕获错误并停止处理。

注意:根据退出代码,您可以将其简化为:

 jekyll.on('exit', gulpCallBack);