Wenn ich das folgende Stück Code aus meinem gulpfile.js schreibe, wird jedes Mal, wenn ich eine Datei speichere oder ändere, die Aufgabe zweimal anstatt nur einmal ausgeführt. Warum? Ich möchte nur, dass es einmal läuft.
%Vor%Ich habe auch das gleiche mit Grunt und dem Plugin namens grunt-contrib-watch erlebt.
Scheint als wäre die Antwort auf diese Frage ein Feature des Editors, der verwendet wurde, Coda 2. Basierend auf einigen der Kommentare hier und beim Testen mit mehreren Editoren scheint es, als ob Coda 2 eine temporäre Datei oder ähnliches speichert und das verursacht Die Schluckuhrfunktion wird zweimal ausgeführt.
Ich habe keine brauchbare Lösung gefunden, als Coda 2 benutzt wurde, und endete mit dem Wechsel zu Sublime Text 3.
Das Problem tritt auf, weil Ihr Editor, in diesem Fall Coda 2, die Datei beim Speichern zweimal ändert. Dasselbe Problem tritt in vim auf, weil vim Puffer-Backups beim Speichern
Die Lösung für das Problem in vim besteht darin,
hinzuzufügen %Vor% zu Ihrer ~/.vimrc
-Datei. Dies ändert das Standard-Sicherungsprotokoll so, dass nur eine Bearbeitung der Originaldatei vorgenommen wird.
Mit anderen Worten, das Standard-Sicherungsprotokoll ist wie folgt:
Und das Hinzufügen von set nowritebackup
ersetzt einfach die ursprüngliche Datei beim Speichern. Dieses Protokoll existiert, um das Risiko eines Datenverlusts im Falle eines E / A-Fehlers beim Speichern zu reduzieren.
Ich füge dasselbe Problem in Espresso hinzu und Sie können es in Gulp "reparieren", indem Sie die debounceDelay-Option wie folgt verwenden:
%Vor%Das hat den Trick für mich gemacht. Aber es ist ein Schmerz, es zu jedem gulp.watch hinzuzufügen. Ich weiß nicht, ob wir diese Option globalely setzen können ...
Sie sollten gulp-batch verwenden können, um die Änderungen zu chargen, da es eine debounce
-Option hat.
In etwa so:
%Vor%Hinweis: Der Debounce-Parameter funktioniert nur für die SAME-Datei / das gleiche Ereignis. Wenn sich mehrere Ereignisse / Dateien ändern, wird es nicht helfen. Manchmal (z. B. habe ich Dateien in ein Verzeichnis kopiert, das von meinem lokalen Server bedient wird) kann gulp-cached helfen, manchmal sogar auszuschließen Dateien / Muster (zB die Sourcemaps-Dateien) könnten helfen (benutzen Sie! um die Auswahl zu negieren). z.B.
%Vor%Ein Jahr später ...
Verwenden Sie
Gaz debounceDelay
-Option hat nichts für mich verändert, auch habe ich nicht verstanden, wie man das Gulp-Batch-Callback-Argument :/
...
Um Folgeaufrufe zu vermeiden, nachdem mehrere Dateien geändert wurden, habe ich die oldschool setTimeout-Funktion verwendet:
%Vor%Hatte das gleiche Problem und es stellt sich heraus, dass Schluck-Quellkarten es verursachen (siehe - & gt; Die Verwendung von Quellkarten bewirkt, dass die Aufgabe zweimal ausgeführt wird )
Erhalte eine Lösung mit gulp-notify und dem Attribut onLast:
%Vor% Neben Editor-spezifischen Lösungen habe ich ein kleines Schluck-Plugin geschrieben, das das Problem löst. Sie können gulp-debounce
so verwenden:
npm install --save-dev gulp-debounce
Ich schreibe hier meine Erfahrung, hilft vielleicht jemandem. Das kostet mich 1 Woche zu erkennen. Ich habe alle möglichen Debugging gemacht. Entfernte Dateien, neu installierte Pakete sauberer Knoten. Sublime Plugins wurden entfernt. Als Bug zu Sublime github und Plugins github-Seiten gemeldet.
Meine Lösung Schließen Sie die Dropbox, wenn sie geöffnet ist. Ich benutze Dropbox für mein Projekt und arbeite dort. Wenn Dropbox geöffnet ist, werden Tasks zweimal ausgeführt, da Dropbox Dateiänderungen erkennt und etwas ausführt. Speziell Typescript-Dateien, ich weiß nicht warum.
Tags und Links javascript gulp