Gulp 4:如何检测复杂构建脚本中的“您是否忘记发出异步完成信号?”错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gulp 4:如何检测复杂构建脚本中的“您是否忘记发出异步完成信号?”错误相关的知识,希望对你有一定的参考价值。

已经迁移到Gulp 4的人可能知道,如果系列中的任务没有正确地表示完成,那么gulp.series - 应该 - 将不会继续执行。

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

所以我的问题是:你如何从外部发现这样的错误?

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

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

答案

您可以使用流/ 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();
    })();    
}

以上是关于Gulp 4:如何检测复杂构建脚本中的“您是否忘记发出异步完成信号?”错误的主要内容,如果未能解决你的问题,请参考以下文章

八Gulp自动化构建工具

我怎样才能改变我的gulp文件,以便在代码库发生变化时运行构建任务?

如何让Gulp识别编译文件中的更改/更新?

找不到盒子。您是不是忘记调用 Hive.openBox()? - 即使我打开了它也没有检测到盒子

使用 Gulp 按顺序连接脚本

在使用 gulp 构建的 Webpack 包中导出 Typescript 函数,浏览器中的空对象