我有以下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

当前回答

所以我在Gulp 4中得到了相同的错误,但解决方案不同。我犯了一个错误: “你忘记给异步完成打信号了吗?” 但在错误之前,它还说: gulp-sass不再有默认的Sass编译器;请自己设置一个。” 一开始我完全错过了这部分。 所以我在gulfile.js中有这个:

const sass = require('gulp-sass')

这应该改为:

const sass = require('gulp-sass')(require('sass'));

现在它起作用了。

其他回答

对于那些试图使用gulp进行本地部署的人,下面的代码将有所帮助

var gulp = require("gulp");
var yaml = require("js-yaml");
var path = require("path");
var fs = require("fs");

//Converts yaml to json
gulp.task("swagger", done => {
    var doc = yaml.safeLoad(fs.readFileSync(path.join(__dirname,"api/swagger/swagger.yaml")));
    fs.writeFileSync(
        path.join(__dirname,"../yourjsonfile.json"),
        JSON.stringify(doc, null, " ")
        );
    done();
});

//Watches for changes    
gulp.task('watch', function() {
  gulp.watch('api/swagger/swagger.yaml', gulp.series('swagger'));  
});

我的解决方案:把所有东西都放在async中,然后等待gulp。

async function min_css() {
    return await gulp
        .src(cssFiles, { base: "." })
        .pipe(concat(cssOutput))
        .pipe(cssmin())
        .pipe(gulp.dest("."));
}

async function min_js() {
    return await gulp
        .src(jsFiles, { base: "." })
        .pipe(concat(jsOutput))
        .pipe(uglify())
        .pipe(gulp.dest("."));  
}

const min = async () => await gulp.series(min_css, min_js);

exports.min = min;

我知道这个问题在6年前就出现了,但可能你在函数中错过了返回。 我今天早上用eslint修复了这个问题,在我的工作目录中运行“gulp lint”后,它给了我同样的消息。

例子:

function runLinter(callback)
{
  return src(['**/*.js', '!node_modules/**'])
    .pipe(eslint())
    .on('end', ()=>
    {
        callback();
    });
}

exports.lint = runLinter;

在gulp版本4及更高版本中,要求所有gulp任务都告诉gulp任务将在何处结束。为此,我们调用一个函数,该函数作为任务函数中的第一个参数传递

var gulp = require('gulp');
gulp.task('first_task', function(callback) {
  console.log('My First Task');
  callback();
})

你需要做一件事:

在函数之前添加async。

const gulp = require('gulp');

gulp.task('message', async function() {
    console.log("Gulp is running...");
});