2015-06-11 12 views
11

Stworzyłem zadanie gulp do łączenia modułów z browserify i używam watchify, aby oglądać zmiany. Oto moje zadanie łyk dla watchify:Watchify nie zawsze wykrywa zmiany w plikach javascript.

gulp.task('watch:browserify', function() { 
    var opts = assign({}, watchify.args, { 
     entries: ['./js/app.js'], 
     debug: true, 
     basedir: './app/', 
     paths: ['./lib'] 
    }); 

    var b = watchify(browserify(opts)); 

    b.on('update', function() { 
     bundle(); 
    }); 

    function bundle() { 
     gutil.log(gutil.colors.blue("Starting Browserify...")); 
     var time = Date.now(); 
     return b.bundle() 
      .on('error', gutil.log.bind(gutil, gutil.colors.red('Browserify Error'))) 
      .pipe(source('bundle.js')) 
      .pipe(buffer()) 
      .pipe(sourcemaps.init({loadMaps: true})) 
      .pipe(sourcemaps.write('.')) 
      .pipe(gulp.dest('app')) 
      .on('end', function() { 
       var duration = Date.now() - time; 
       gutil.log(gutil.colors.blue('Finished Browserify') + " (%dms)", duration); 
      }) 
    } 

    bundle(); 
}); 

Gdybym edytować główne js plików (./js/app.js), zmiana jest zawsze wykrywane. Ale kiedy edytuję inne pliki, których wymaga główny plik, zmiana jest wykrywana mniej więcej co drugi raz (ale nie zawsze). Czy robię coś złego tutaj?

Here is the full Github repo więc może uzyskać pełny pojęcia jak planowałem to zadziałało

+1

mam ten sam problem. nie zawsze wykrywa "małe" zmiany. Nadal uderzam 3-5 razy, aby utworzyć nowe linie. Zawsze go wykryje, a kiedy przebuduje moją aplikację, usuwam linie. Wiem, że to jest niezręczne, ale działa: D – marcel

+0

@marcel tak, teraz robię to samo, ale to naprawdę, naprawdę denerwujące. – tuks

+0

Próbowałem twojego projektu GitHub - wykrywanie zmian we wszystkich plikach javascript w aplikacji/js/.. działa dobrze na mojej maszynie. (Może naprawiłeś to już teraz?) –

Odpowiedz

1

Istnieją dwa problemy z próbki kodu.

Po pierwsze, watch:browserify musi albo odebrać oddzwonienie, albo zwrócić strumień, albo mogą wystąpić warunki wyścigu, jak to omówiono here. Na przykład ostatnia linia w zadaniu może być return bundle();.

Po drugie, przy użyciu watchify opcje cache i packageCache muszą być przekazywane do browserify(), jak pokazano poniżej i określone here.

var b = browserify({ cache: {}, packageCache: {} }); 

Wreszcie, należy upewnić się, że w rzeczywistości zależy app.js, gdzieś w łańcuchu zależności, na innych plików, które edytujesz.

0

Miałem ten sam problem i miałem wszystko, co wspomniano poprawnie @akarve. Wróciłem do watchify: "^2.6.0", a problem został rozwiązany. Jednak czas budowania/wykrywania był wolniejszy - około pół sekundy. Mimo to, znacznie lepiej niż sporadycznie (często!) Nie wykryto moich zmian przez watchify.

Powiązane dyskusja tutaj (także wtedy, gdy znalazłem komentarz o v2.6.0) - https://github.com/substack/watchify/issues/216#issuecomment-119285896