在产生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);