Terminal 吞咽4:如何检测;您是否忘记发出异步完成的信号;复杂生成脚本中出现错误

Terminal 吞咽4:如何检测;您是否忘记发出异步完成的信号;复杂生成脚本中出现错误,terminal,gulp,error-code,gulp-4,Terminal,Gulp,Error Code,Gulp 4,迁移到Gulp 4的人可能知道,Gulp.series(应该是这样的)如果序列中的任务没有发出正确的完成信号,就不会继续执行 我的问题是它处理这种错误的方式——它只是控制台中的一条消息(你忘了发出异步完成的信号了吗?);gulp仍然存在,错误代码为0。这意味着,如果在一个更复杂的构建脚本中运行gulp,在该脚本看来,一切都正常,gulp任务成功完成,但显然没有。(相反,如果您使用gulpUtil.plugin error抛出错误,则会导致非0错误代码。) 所以我的问题是:你会如何“从外部”发现这

迁移到Gulp 4的人可能知道,
Gulp.series
(应该是这样的)如果序列中的任务没有发出正确的完成信号,就不会继续执行

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

所以我的问题是:你会如何“从外部”发现这样的错误已经发生

  • 在这种情况下,有没有一种方法可以让一个非0的呼气出口?(是否有我可以订阅并抛出错误的事件,或我可以设置的配置等)
  • 我是否应该检查应该生成的资产是否存在?(我觉得这个解决方案非常脆弱。)
  • 我是否应该“查看”控制台消息并查找特定字符串,如“您是否忘记发送信号…”?(啊!)
  • (是的,我知道我可以大口大口地做任何事情,然后我就不需要检查错误代码了,但让我们假设,事实上,我不能。)

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

您可以使用stream/Promise/callback来通知流程。握手完成后,您可以继续此过程

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

谢谢你的详细回答!然而,这并没有真正回答我的问题:)我知道Gulp4中异步完成是如何工作的,任务应该如何运行。我所需要的是一种方法,在“吞咽”之外,检测过程是否因为行为不端的任务而停止。如果任务抛出错误,gulp将以非0错误代码退出–这很容易处理!但是,异步完成错误使gulp退出0,这使得检测和处理它变得困难。显然,最好尽可能避免这个错误——使用您提到的方法——但事情仍然可能出错,我想处理它。