Terminal 吞咽4:如何检测;您是否忘记发出异步完成的信号;复杂生成脚本中出现错误
迁移到Gulp 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.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,这使得检测和处理它变得困难。显然,最好尽可能避免这个错误——使用您提到的方法——但事情仍然可能出错,我想处理它。