管理Gulp依赖项时生成子进程

5

我有一个gulp任务,它会生成一个jekyll子进程。它将我的Markdown编译成_site中的HTML文件。

我有另一个任务,它将此任务作为依赖项,并对生成的HTML进行一些后处理。但是,它触发得太早了——因为子进程似乎不会影响依赖管理。

如何确保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())
});
1个回答

13

将您的 jekyll 任务更改为像这样包含异步回调函数的 任务支持异步回调函数

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');
    });
});

所有需要改变的只是在任务函数签名中添加回调函数参数,并监听生成的进程的exit事件来处理回调。现在,当Jekyll进程退出时,gulp就能够得到通知。使用退出码可以捕获错误并停止处理。

注意:根据退出码,你可能可以简化此过程:

jekyll.on('exit', gulpCallBack);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接