一、Local gulp not found ,Try running: npm install gulp(找不到本地gulp)
本问题提示npm install gulp
,但是运行之后根本不行。
解决办法:输入cnpm link gulp
,在项目目录中运行,目的是创建指向全局安装的Gulp模块的本地链接。
(如果不起作用,可以尝试npm link gulp --no-bin-links
看是否有效)
二、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;
});