gulp更新4.0后的报错(gulp报Did you forget to signal async completion?)

本文首发于青云工作室

原文链接为 https://qystudio.ltd/posts/55153.html

缘起

今天我升级了gulp到4.0,在git三件套之后,网站并没有更新,我便登录了github查看action的运行状况,便有此文

gulp更新4.0后的报错(gulp报Did you forget to signal async completion?)

问题

在查看了日志最后发现了如下报错

Did you forget to signal async completion?

在查看了gulp官网之后我人傻了,全是英文

这是一个新特性,简单来说就是原因: gulp 不再支持同步任务了。 因为同步任务常常会导致难以调试的细微错误,例如忘记从任务 (task)中返回 stream。 当你看到 “ Did you forget to signal async completion ?” 警告时,说明你并未使用前面提到的返回方式

意思是你没有写一个任务完成的返回通知(如果我描述有误评论区告诉我)

官网的原文是When you see the "Did you forget to signal async completion?" warning, none of the techniques mentioned above were used. You'll need to use the error-first callback or return a stream, promise, event emitter, child process, or observable to resolve the issue.

解决方案

官网的解决方案是

Using async/await

即把原来类似这样的代码

const gulp = require('gulp');
gulp.task('testGulp', () => {
console.log('Hello World!');
});

改成这样

const gulp = require('gulp');
gulp.task('testGulp', async() => {
await console.log('Hello World!');
});

就正常了

更简单的方法

在我一顿搜索之后发现了更简单的方法

在不使用文件流的情况下,向task的函数里传入一个名叫done的回调函数,以结束task

例如源代码是这样的

gulp.task('default', gulp.series('one'));

那只要添加一个done的回调函数即可

gulp.task("default", done => {
gulp.series("one");
done();
});

结语

又码了700多字,如果有其他问题可以在评论区回复噢,我会尽量回复的

上一篇:BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏 [Nim游戏 SG函数]


下一篇:Android Framework------之Property子系统