2015-04-15 11 views
9

Za każdym razem, gdy watchify wykrywa zmianę, czas pakowania jest wolniejszy. Coś jest nie tak z moim zadaniem. Czy masz jakieś pomysły?Obserwuj w/gulp i babel dostaje stopniowo wolniej

gulp.task('bundle', function() { 
    var bundle = browserify({ 
      debug: true, 
      extensions: ['.js', '.jsx'], 
      entries: path.resolve(paths.root, files.entry) 
     }); 

    executeBundle(bundle); 
}); 

gulp.task('bundle-watch', function() { 
    var bundle = browserify({ 
     debug: true, 
     extensions: ['.js', '.jsx'], 
     entries: path.resolve(paths.root, files.entry) 
    }); 

    bundle = watchify(bundle); 
    bundle.on('update', function(){ 
     executeBundle(bundle); 
    }); 
    executeBundle(bundle); 

}); 

function executeBundle(bundle) { 
    var start = Date.now(); 
    bundle 
     .transform(babelify.configure({ 
      ignore: /(bower_components)|(node_modules)/ 
     })) 
     .bundle() 
     .on("error", function (err) { console.log("Error : " + err.message); }) 
     .pipe(source(files.bundle)) 
     .pipe(gulp.dest(paths.root)) 
     .pipe($.notify(function() { 
      console.log('bundle finished in ' + (Date.now() - start) + 'ms'); 
     })) 
} 
+1

Chyba już poprawiony, dodając te dwie opcje pakietu wydaje się to naprawić: cache: {}, packageCache: {} – Niels

+0

Opcje te są wymagane do użyj watchify. – JMM

+0

Mam skonfigurowane te opcje, ale nadal widzę podobny problem. Przy każdym uruchomieniu czas odbudowy wzrasta, nawet jeśli plik jest tylko dotknięty (bez faktycznych zmian), aż do momentu, w którym nastąpi awaria z 'RangeError: Przekroczony maksymalny rozmiar stosu wywołań ' – Emily

Odpowiedz

36

Miałem ten sam problem i zbadałem go, ustawiając zmienną środowiskową DEBUG na babel. np .:

$ DEBUG=babel gulp 

Po sprawdzeniu wyników debugowania zauważyłem, że babelify wielokrotnie przeprowadzało transformacje.

Sprawca był taki, że faktycznie dodałem transformację za każdym razem, gdy pakiet został wykonany. Wydaje się, że masz ten sam problem.

Przesuń

.transform(babelify.configure({ 
    ignore: /(bower_components)|(node_modules)/ 
})) 

od wewnątrz executeBundle do zadań. Nowy bundle-watch można zapisać tak:

gulp.task('bundle-watch', function() { 
    var bundle = browserify({ 
     debug: true, 
     extensions: ['.js', '.jsx'], 
     entries: path.resolve(paths.root, files.entry) 
    }); 

    bundle = watchify(bundle); 
    bundle.transform(babelify.configure({ 
     ignore: /(bower_components)|(node_modules)/ 
    })) 
    bundle.on('update', function(){ 
     executeBundle(bundle); 
    }); 
    executeBundle(bundle); 
}); 
+3

Żałuję, że nie mogłem tego zrobić więcej. Długo to zajęło by mi to rozgryźć. – joemaller

+0

Dobrze zauważył! Przeniesienie transformacji z metody, która nazywa się każdą aktualizacją watchify, rozwiązało podobny problem, jaki miałem z procesem kompilacji, biorąc stopniowo coraz więcej czasu. –