【问题标题】:Avoid the task completion callback called too many times?避免任务完成回调调用次数过多?
【发布时间】:2015-12-16 04:26:46
【问题描述】:

鉴于以下 gulp 任务,我能够成功启动 gulp、webpack 和 nodemon 进程,但 webpack 任务是开放式的,因此当它们的监视/编译周期完成时,它们将继续触发完成处理程序。

服务器任务依赖于客户端任务输出,所以我需要这些操作是同步的,因此done

function onBuild(done) {
    return function(err, stats) {
        if(err) {
            gutil.log('Error', err);
            if(done) {
                done();
            }
        } else {
            Object.keys(stats.compilation.assets).forEach(function(key){
                gutil.log('Webpack: output ', gutil.colors.green(key));
            });
            gutil.log('Webpack: ', gutil.colors.blue('finished ', stats.compilation.name));
            if(done) {
                done();
            }
        }
    }
}

//dev watch
gulp.task('webpack-client-watch', function(done) {
    webpack(devConfig[0]).watch(100, function(err, stats) {
        onBuild(done)(err, stats);
    });
});

gulp.task('webpack-server-watch', function(done) {
    webpack(devConfig[1]).watch(100, function(err, stats) {
        onBuild(done)(err, stats);
        nodemon.restart();
    });
});

gulp.task('webpack-watch',function(callback) {
    runSequence(
        'webpack-client-watch',
        'webpack-server-watch',
        callback
    );
});

gulp.task('nodemon', ['webpack-watch'], function() {
    nodemon({
        script: path.join('server/dist/index.js'),
        //ignore everything
        ignore: ['*'],
        watch: ['foo/'],
        ext: 'noop'
    }).on('restart', function() {
        gutil.log(gutil.colors.cyan('Restarted'));
    });
});

当我更改文件时,观察者会做它的事情,而 gulp 会抱怨回调被再次调用。

[15:00:25] Error: task completion callback called too many times

我看过这个,但不确定它是否适用。

Why might I be getting "task completion callback called too many times" in gulp?

基本上,我只是希望它能够同步连续地工作而不会出错。

gulp nodemon

【问题讨论】:

    标签: node.js gulp webpack


    【解决方案1】:

    这为我解决了这个问题:只是不要在您的 webpack-watch 任务中调用 callback 参数。完全离开它。
    之后,watcher 工作得又快又好,没有任何抱怨。

    【讨论】:

    • 不确定这是否会产生任何负面影响,但这有效
    【解决方案2】:

    如果您的应用程序中存在 public 文件夹。请删除并重新运行,您可以看到此问题已解决。

    【讨论】:

      猜你喜欢
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多