2015-06-11 9 views
11

Ich habe eine Schluckaufgabe zum Bündeln von Modulen mit browserify erstellt und wende mithilfe von watchify nach Änderungen. Hier ist meine schluck Aufgabe für watchify:Watchify erkennt Änderungen in JavaScript-Dateien nicht immer

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(); 
}); 

Wenn ich Haupt js-Datei (./js/app.js) bearbeiten, wird die Änderung immer erkannt. Aber wenn ich einige andere Dateien bearbeite, die die Hauptdatei benötigt, wird die Änderung ungefähr jedes zweite Mal erkannt (aber nicht immer). Mache ich hier etwas falsch?

Here is the full Github repo so vielleicht bekommen Sie die komplette Idee, wie ich das

arbeiten geplant
+1

ich das gleiche Problem haben. Es erkennt nicht immer "kleine" Änderungen. Ich gebe noch 3-5 Mal ein, um neue Zeilen zu erstellen. Er wird es immer erkennen und wenn er meine App neu erstellt, entferne ich die Zeilen. Ich weiß, es ist peinlich, aber es funktioniert: D – marcel

+0

@marcel yeah Ich mache das gleiche für jetzt, aber es ist wirklich, wirklich nervig – tuks

+0

Ich habe dein GitHub Projekt versucht - Erkennung von Änderungen an allen Javascript-Dateien in app/js/.. funktioniert auf meinem Rechner einwandfrei. (Vielleicht hast du es jetzt behoben?) –

Antwort

1

Es gibt zwei Probleme mit dem Codebeispiel.

Zuerst muss watch:browserify entweder einen Rückruf ausführen oder einen Stream zurückgeben, oder es können Race-Bedingungen auftreten, wie bereits beschrieben here. So könnte beispielsweise die letzte Zeile in Ihrer Aufgabe return bundle(); lauten.

Zweitens, bei der Verwendung von watchify, die cache und packageCache Optionen müssen zu browserify() geben werden, wie unten gezeigt und angegeben here.

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

schließlich sicher, dass app.js in der Tat hängt irgendwo in seiner Abhängigkeitskette, auf den anderen Dateien, die Sie bearbeiten.

0

Ich hatte das gleiche Problem, und ich hatte alles @akarve erwähnt richtig eingerichtet. Ich ging zurück zu watchify: "^2.6.0" und das Problem wurde behoben. Die Build-/Erkennungszeit war jedoch etwas langsamer - etwa eine halbe Sekunde. Trotzdem, viel besser als gelegentlich (oft!), Ohne dass meine Änderungen von watchify erkannt werden.

Verwandte Diskussion hier (auch wo fand ich den Kommentar zu v2.6.0) - https://github.com/substack/watchify/issues/216#issuecomment-119285896