gulp4.0报错‘The following tasks did not complete: ...’

在使用gulp4.0执行task的时候,使用匿名函数经常出现以下错误:

gulpfile.js

var gulp = require('gulp');

gulp.task(server', () => {
  console.log("HTTP Server Started");
});


报错信息

[17:33:34] Using gulpfile F:\web\GitLibrary\Management system\gulpfile.js
[17:33:34] Starting 'default'...
[17:33:34] Starting 'server'...
[17:33:34] Finished 'server' after 29 ms
[17:33:34] Starting ''...
[17:33:34] The following tasks did not complete: default, 
[17:33:34] Did you forget to signal async completion?
解决的方法有五种,这五种除了最后一个都亲测没有问题。

本文翻译原文地址: https://stackoverflow.com/questions/36897877/gulp-error-the-following-tasks-did-not-complete-did-you-forget-to-signal-async

1. 返回一个stream

这种操作方式是用来新建task的,和3.x的用法一样。
var print = require('gulp-print');

gulp.task('server', () => {
  return gulp.src('package.json')
    .pipe(print(function() { return 'HTTP Server Started'; }));
});

2. 返回一个Promise


在异步请求机制中,是有一个Promise对象的,它包含了请求的过程中所有内容。如下:

gulp.task('server', () => { 
  return new Promise(function(resolve, reject) {
    console.log("HTTP Server Started");
    resolve();
  });
});

3. 返回一个回调函数



这个是最简单的一种方法,gulp会自动将这个回调函数作为一个参数返回到任务中,在完成的时候一定要调用这个函数。如下:

gulp.task('default', gulp.series('server', (done) => done()))

4. 返回一个子进程child process

当我们只是执行一段纯js代码,没有用到node相关的方法时用这个方法。

const spawn = require('child_process').spawn;

gulp.task('server', function() {
  return spawn('echo', ['HTTP', 'Server', 'Started'], { stdio: 'inherit' });
});

5. 返回一个 RxJS Observable.

这个方法我没有过使用过,但是如果你是用RxJS 的时候,可以用这个方法。


const Observable = require('rx').Observable;

gulp.task('server', function() {
  let o = Observable.just('HTTP Server Started');
  o.subscribe(function(str) {
    console.log(str);
  });
  return o;
});


你可能感兴趣的:(gulp)