2015-09-18 9 views
6

Biorąc pod uwagę następujące zadania związane z haustem, mogę pomyślnie rozpocząć proces łyka, pakowania w sieci Web i proces nodemon, ale zadania pakietu Web Pack są otwarte, więc będą kontynuować uruchamianie procedury zakończenia, gdy zakończy się cykl śledzenia/kompilowania.Unikaj wywołania zwrotnego zakończenia zadania wywołanego zbyt wiele razy?

Zadaniem serwera zależy na wyjściu zadań klient, więc trzeba te operacje być synchroniczny, stąd 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')); 
    }); 
}); 

Kiedy zmienić plik, obserwator wykonuje swoją rzecz i łyk narzeka zwrotnego znowu wezwany.

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

Szukałem w to, ale nie wiem, czy jego zastosowanie.

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

Zasadniczo, po prostu chcę to pracować synchronicznie i ciągle bez błędu.

gulp nodemon

Odpowiedz

8

to rozwiązać to dla mnie: Tylko nie mów parametr callback w zadaniu webpack-watch. Zostaw to całkowicie.
Po tym, obserwator działa dobrze i szybko bez narzekania.

+1

nie jestem pewien, czy to daje negatywny wpływ, ale to działa –