一、Local gulp not found ,Try running: npm install gulp(找不到本地gulp)

本问题提示npm install gulp,但是运行之后根本不行。
解决办法:输入cnpm gulp,在项目目录中运行,目的是创建指向全局安装的Gulp模块的本地链接。
(如果不起作用,可以尝试npm gulp --no-bin- s看是否有效)

二、The following tasks did not complete: Did you forget to signal async completion?(没有异步完成信号)

\"在这里插入图片描述\"
造成这种原因大部分是因为版本原因导致,这个时候你需要执行gulp -v查看本地的gulp版本。
在4中任务执行更加严格,你的任务如果没有显式发出异步完成的信号,那么这个任务就不会执行,你必须明确的写出任务完成并返回。
解决办法:具体操作我是在需要执行的任务最后加入了:

return new Promise(function(resolve, reject) {
        console.log(\"HTTP Server Started\");
        resolve();
    });

这样任务就可以执行了。

其他解决办法:

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;
});
收藏 打印