我有以下gulpfile.js,我通过命令行gulp消息执行:
var gulp = require('gulp');
gulp.task('message', function() {
console.log("HTTP Server Started");
});
我得到以下错误消息:
[14:14:41] Using gulpfile ~\Documents\node\first\gulpfile.js
[14:14:41] Starting 'message'...
HTTP Server Started
[14:14:41] The following tasks did not complete: message
[14:14:41] Did you forget to signal async completion?
我在Windows 10系统上使用gulp 4。下面是gulp——version的输出:
[14:15:15] CLI version 0.4.0
[14:15:15] Local version 4.0.0-alpha.2
就是这样:没有同步任务。
无同步任务
不再支持同步任务。它们通常会导致难以调试的细微错误,比如忘记从任务中返回流。
当您看到“是否忘记发出异步完成信号?”警告,上面提到的技术都没有使用。您需要使用错误优先回调或返回流、承诺、事件发射器、子进程或可观察对象来解决该问题。
使用异步/等待
当不使用任何前面的选项时,您可以将任务定义为async函数,该函数将任务包装在promise中。这允许您使用await和其他同步代码同步地处理promise。
const fs = require('fs');
async function asyncAwaitTask() {
const { version } = fs.readFileSync('package.json');
console.log(version);
await Promise.resolve('some result');
}
exports.default = asyncAwaitTask;
这个工作!
在2021年2月18日的最新更新中,我在使用下面的旧解决方案后发现了这个问题,然后我在下一个gulp版本中使用以下方法来修复它。
文件:Package.json
...,
"devDependencies": {
"del": "^6.0.0",
"gulp": "^4.0.2",
},
...
文件:gulpfile.js
const {task} = require('gulp');
const del = require('del');
async function clean() {
console.log('processing ... clean');
return del([__dirname + '/dist']);
}
task(clean)
...
老版本
gulp.task('script', done => {
// ... code gulp.src( ... )
done();
});
gulp.task('css', done => {
// ... code gulp.src( ... )
done();
});
gulp.task('default', gulp.parallel(
'script',
'css'
)
);