5

正如迁移到 Gulp 4 的人可能知道的gulp.series那样,如果系列中的任务未正确发出完成信号,则不会继续执行。

我的问题是它处理这种错误的方式——它只是控制台中的一条消息(你忘记发出异步完成信号了吗?);gulp 仍然以错误代码 0 退出。这意味着,如果您在更复杂的构建脚本中运行 gulp,对于该脚本来说,看起来一切正常,并且 gulp 任务成功完成,但显然没有。(相反,如果您使用 抛出错误gulpUtil.plugin error,则会产生非 0 错误代码。)

所以我的问题是:您将如何“从外部”检测到发生了此类错误?

  • 在这种情况下,有没有办法让 gulp 退出非 0?(是否有我可以订阅并引发错误的事件,或者我可以设置的配置等)
  • 我是否应该尝试检查应该生成的资产是否存在?(我发现这个解决方案非常脆弱。)
  • 我是否应该“观看”控制台消息并寻找特定的字符串,例如“您是否忘记发出信号...”?(啊!)
  • (是的,我知道我可以用 gulp 做所有事情,然后我就不需要检查错误代码,但我们假设,实际上,我做不到。)

还有其他我没有想到的可能性吗?

4

1 回答 1

2

您可以使用流/承诺/回调来通知该过程。握手完成后,您可以继续该过程。

var print = require('gulp-print');

gulp.task('message', function() {
  return gulp.src('package.json')
    .pipe(print(function() { return 'HTTP Server Started'; }));
});

gulp.task('message', function() { 
  return new Promise(function(resolve, reject) {
    console.log("HTTP Server Started");
    resolve();
  });
});

gulp.task('message', function(done) {
  console.log("HTTP Server Started");
  done();
});

否则以这种方式使用回调。

function syncTasks(callback1)
{
    return gulp.series(firstTask, secondTask, (callback2) =>
    {
        callback1();
        callback2();
    })();    
}
于 2017-12-26T10:15:36.970 回答