2015-09-18 4 views
6

Учитывая следующие задачи 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')); 
    }); 
}); 

При изменении файла, наблюдатель делает свое дело и глоток жалуется на обратном вызове будучи вызванным еще раз.

[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

ответ

8

Это решило для меня: Только не называйте параметр callback в вашей webpack-watch задаче. Оставьте это полностью.
После этого наблюдатель работает нормально и быстро, не жалуясь.

+1

не уверен, что это оказывает негативное влияние, но это работает –