Gulp.js, Aufgabe wird beim Speichern von Dateien zweimal ausgeführt

7

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.

    
Øyvind 06.02.2014, 16:28
quelle

12 Antworten

0

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.

    
Øyvind 28.02.2014, 13:22
quelle
13

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:

  1. Schreiben Sie den Puffer in die Sicherungsdatei
  2. Löschen Sie die Originaldatei
  3. Benennen Sie die Sicherung in den Namen der ursprünglichen Datei um

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.

    
Ryan Atallah 26.04.2014 11:03
quelle
12

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 ...

    
Mushr00m 28.08.2014 12:26
quelle
5

Das hat für mich funktioniert

%Vor%

Ссылка

    
Trisha Crowley 24.02.2016 23:54
quelle
2

Sie sollten gulp-batch verwenden können, um die Änderungen zu chargen, da es eine debounce -Option hat.

In etwa so:

%Vor%     
OverZealous 06.02.2014 21:12
quelle
2

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%     
MattDiMu 21.07.2015 07:31
quelle
1

Ich sah ein ähnliches Problem, aber es wurde dadurch verursacht, dass die Seite in mehreren Tabs / Fenstern geöffnet wurde.

    
LukeAskew 20.03.2014 18:52
quelle
1

Ein Jahr später ...

Verwenden Sie

  • nodejs 0.10.25
  • Schluck 3.8.10

Gaz debounceDelay -Option hat nichts für mich verändert, auch habe ich nicht verstanden, wie man das Gulp-Batch-Callback-Argument :/ ...

verwendet

Um Folgeaufrufe zu vermeiden, nachdem mehrere Dateien geändert wurden, habe ich die oldschool setTimeout-Funktion verwendet:

%Vor%     
Stphane 08.02.2015 20:56
quelle
1

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%     
Alexander Schmidt 29.08.2016 09:52
quelle
0

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

%Vor%     
mnzaki 08.02.2016 11:37
quelle
0

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.

    
atilkan 05.04.2016 17:53
quelle
0

Ich habe versucht, entprellen und wartenWriteFinish. Es hat nicht funktioniert. Das tat:

%Vor%     
Peheje 08.04.2017 12:47
quelle

Tags und Links