【问题标题】:Gulp (pump, run-sequence) "task completion callback called too many times"Gulp (pump, run-sequence) “任务完成回调调用了太多次”
【发布时间】:2017-04-21 02:06:20
【问题描述】:

我正在尝试使用gulp-pumpgulp-run-sequence,但遇到了关于task completion callback called too many times 的错误。

下面是我的 Gulpfile:

var gulp = require('gulp');
var sass = require('gulp-sass');
var uglify = require('gulp-uglify');
var autoprefixer = require('gulp-autoprefixer');
var cleanCSS = require('gulp-clean-css');
var rename = require('gulp-rename');
var runSequence = require('run-sequence');
var pump = require('pump');

var pumpCb = function (err) {
    if (err) {
        console.log('Error: ', err.toString());
    }
};

// Local

gulp.task('local-sass', function (pumpCb) {
    return pump([
            gulp.src('public/assets/src/sass/**/*.scss'),
            sass(),
            autoprefixer(),
            gulp.dest('public/assets/dist/css/')
        ],
        pumpCb
    );
});

gulp.task('local-js', function (pumpCb) {
    return pump([
            gulp.src('public/assets/src/js/**/*.js'),
            uglify(),
            gulp.dest('public/assets/dist/js/')
        ],
        pumpCb
    );
});

// Production

gulp.task('prod-sass', function (pumpCb) {
    return pump([
            gulp.src('public/assets/src/sass/**/*.scss'),
            sass({outputStyle:'compact'}),
            autoprefixer(),
            gulp.dest('public/assets/dist/css/')
        ],
        pumpCb
    );
});

gulp.task('prod-css', function (pumpCb) {
    return pump([
            gulp.src(['./public/assets/dist/css/**/*.css','!./public/assets/dist/css/**/*.min*']),
            cleanCSS(),
            rename({ suffix: '.min' }),
            gulp.dest('public/assets/dist/css/')
        ],
        pumpCb
    );
});

gulp.task('prod-js', function (pumpCb) {
    return pump([
            gulp.src('public/assets/src/js/**/*.js'),
            uglify(),
            rename({ suffix: '.min' }),
            gulp.dest('public/assets/dist/js')
        ],
        pumpCb
    );
});

// Calls

gulp.task('default', function () {
    gulp.watch('public/assets/src/sass/**/*.scss',['local-sass']);
    gulp.watch('public/assets/src/js/**/*.js',['local-js']);
});

gulp.task('prod', function () {
    runSequence('prod-sass','prod-css','prod-js');
});

run-sequencepump 的文档中我看不出我做错了什么,所以也许这是对 Gulp 的更广泛的误解?

我已经阅读了大多数关于同一错误的答案,但我认为它们不适用于这个特定案例,我也看不出如何将他们的发现推断到我自己的 Gulpfile 中。

任何帮助将不胜感激!

【问题讨论】:

  • 尝试从每个任务的函数参数中删除pumpCB。我不相信您可以为任务函数提供回调并返回流。
  • 刚刚试了一下,虽然它消除了回调问题,但这也意味着如果我的 SASS 有错误,节点只会报告Error: premature close,而不是关于 SASS 中的内容和位置的有用错误出错。没有正确的方法来使用pumpsequence 和回调错误吗?

标签: npm gulp


【解决方案1】:

我在 gulp 任务中也遇到了这个错误。这是因为您有一个return 语句并且您正在调用任务回调pumpCb。删除return 语句。

【讨论】:

  • 再次感谢,也看到了您对 GitHub 问题的评论。现在只需要弄清楚为什么在我的 Gulpfile 中,local-js 任务正在运行来自 prod-js 的重命名函数——即使它们在不同的任务中......!
  • @RobertTolton,我看到你从来没有清除过你的dist/ 目录。也许您在之前执行 prod 任务时看到了 .min 文件?
  • 即使我手动清除了dist 文件夹,local-js 任务仍然会以某种方式创建一个缩小文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-08
  • 2015-05-13
  • 2015-12-16
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多