【问题标题】:Gulp 4 Migration Errors (Did you forget to signal async completion?)Gulp 4 迁移错误(您是否忘记发出异步完成信号?)
【发布时间】:2016-03-24 04:04:16
【问题描述】:

我有一个 gulp 3 文件,我正在尝试将其升级到 gulp 4。当我这样做时,有些任务会起作用,而其他任务则不会。我得到的三个错误如下:

干净的风格:

gulp.task('clean-styles', function (done) {
    var files = config.temp + '**/*.css';
    clean(files, done);
});

[23:47:05] The following tasks did not complete: clean-styles 
[23:47:05] Did you forget to signal async completion?

scss-watcher:

gulp.task('scss-watcher', function () {
    gulp.watch([config.scss], ['styles']);
});

[23:51:27] 'scss-watcher' errored after 2.46 ms
[23:51:27] Error: watching ./src/client/styles/styles.scss: watch task has to be a function (optionally generated by using gulp.parallel or gulp.series)

styles:(如果我删除 clean-styles 系列,这将起作用)

gulp.task('styles', gulp.series('clean-styles', function () {
log('Compiling SCSS --> CSS');

return gulp
    .src(config.scss)
    .pipe($.scss())
    .pipe($.autoprefixer({ browsers: ['last 2 versions', '> 5%'] }))
    .pipe(gulp.dest(config.temp));
}));

[23:52:42] The following tasks did not complete: styles, clean-styles
[23:52:42] Did you forget to signal async completion?

兽医:(作品)

gulp.task('vet', function () {
    log('Analyzing source with ESLint');
    return gulp
        .src(config.js)
        .pipe($.if(args.verbose, $.print()))
        .pipe($.eslint())
        .pipe($.eslint.format())
        .pipe($.eslint.failOnError());
});

功能:

function clean(path, done) {
    log('Cleaning: ' + $.util.colors.blue(path));
    del(path, done);
}

function log(msg) {
    if (typeof(msg) === 'object') {
        for (var item in msg) {
            if (msg.hasOwnProperty(item)) {
                $.util.log($.util.colors.blue(msg[item]));
            }
        }
    }
    else {
        $.util.log($.util.colors.blue(msg));
    }
}

我必须遗漏一些东西。任何人都可以填写我缺少的内容吗?

【问题讨论】:

    标签: javascript gulp build-automation


    【解决方案1】:

    简洁风格

    del 没有回调函数。它返回一个Promise,你必须在你的任务中返回:

    function clean(path) {
        log('Cleaning: ' + $.util.colors.blue(path));
        return del(path);
    }
    gulp.task('clean-styles', function () {
        var files = config.temp + '**/*.css';
        return clean(files);
    });
    

    scss-watcher

    gulp.watch() 不再支持任务名称数组。你必须向它传递一个函数,gulp.series()gulp.parallel()

    gulp.task('scss-watcher', function () {
        gulp.watch([config.scss], gulp.series('styles'));
    });
    

    样式

    应该使用上面对clean-styles 的更改。

    【讨论】:

    • 谢谢您,我可以再问 1 个问题。编译打字稿时出现以下错误。错误 TS2304:找不到名称“Promise”。错误 TS2304:找不到名称“Map”。错误 TS2304:找不到名称“MapConstructor”。错误 TS2304:找不到名称“Set”。错误 TS2304:找不到名称“迭代器”。错误 TS1219:对装饰器的实验性支持是一项可能在未来版本中更改的功能。设置“experimentalDecorators”选项以删除此警告。然而它仍然编译。有没有办法解决这个问题?
    • 这与迁移到 Gulp 4 的原始问题并没有真正的关系。您应该打开一个新问题并包含错误消息和 Gulpfile 的相关部分(或用于编译 TypeScript 的任何内容)文件)。最好包含一个最小的 TypeScript 文件以及可以重现错误。
    • @SvenSchoenung 这是否意味着 readme.io 上的 Gulp 4 文档不正确:gulp.readme.io/docs/gulpwatchglob-opts-fn?它说第一个参数可以是 glob 数组:“单个 glob 或 glob 数组,指示要监视哪些文件的更改。”
    • @revelt 全局数组!= 任务数组。两种不同的东西。
    • @SvenSchoenung 好点。我自己在使用 glob,并没有注意“任务”部分。谢谢你的澄清。
    【解决方案2】:

    朋友们,这是解决此问题的方法:

    我们需要调用回调函数(任务和匿名)

    function electronTask(callbackA)
    {
        return gulp.series(myFirstTask, mySeccondTask, (callbackB) =>
        {
            callbackA();
            callbackB();
        });
    
    }
    

    【讨论】:

    • 我不认为你需要最后一个括号 () 因为该系列不返回要调用的函数。 (AFAIK)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多