2016-07-06 55 views
1

我正在将不同来源的Typescript文件编译为不同的目标。我需要知道什么时候所有编译完成才能运行minifyJS任务。错误:调用次数太多的任务完成回调

问题是我得到的错误:Error: task completion callback called too many times。这是对的,但我想如何管理呢?

gulp.task('compileTS', function (done) { 
    // Compile pages 
    pump([ 
     gulp.src(paths.componentsTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.dest) 
    ], done); 

    // Compile services 
    pump([ 
     gulp.src(paths.servicesTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.dest + 'Services/') 
    ], done); 

    // Compile tests 
    pump([ 
     gulp.src(paths.testsTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.destTestsJS) 
    ], done); 
}); 

// This task needs to be called after 'compileTS' is done 
gulp.task('minifyJS', ['compileTS'], function() { 
    pump([ 
     gulp.src([paths.dest + paths.allJS]), 
     uglify(), 
     rename({ 
      suffix: '.min' 
     }), 
     gulp.dest(paths.dest) 
    ]); 
}); 
+0

请你可以发布你的gulpfile.js完整,我可以在本地运行并为你发布一个解决方案:) – mattpark22

回答

2

添加一些计数器(例如remains)来跟踪completness:

gulp.task('compileTS', function (done) { 
    var remains = 0; 
    // Compile pages 
    remains++; 
    pump([ 
     gulp.src(paths.componentsTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.dest) 
    ], completed); 

    remains++; 
    // Compile services 
    pump([ 
     gulp.src(paths.servicesTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.dest + 'Services/') 
    ], completed); 

    remains++; 
    // Compile tests 
    pump([ 
     gulp.src(paths.testsTS), 
     typescript({ 
      target: 'ES5' 
     }), 
     gulp.dest(paths.destTestsJS) 
    ], completed); 

    function completed() { 
     if (--remains===0) { 
      done(null, ''); 
     } 
    } 
}); 

处理错误我一直为你的。

+0

我想到了这个解决方案。我想我会去做,这太糟糕了,没有“吞噬解决方案”。 – Elfayer

相关问题