Ich verwende gulp 3.6.2 und habe die folgende Aufgabe, die anhand eines Beispiels online eingerichtet wurde
gulp.task('watch', ['default'], function () {
gulp.watch([
'views/**/*.html',
'public/**/*.js',
'public/**/*.css'
], function (event) {
return gulp.src(event.path)
.pipe(refresh(lrserver));
});
gulp.watch(['./app/**/*.coffee'],['scripts']);
gulp.watch('./app/**/*.scss',['scss']);
});
Jedes Mal, wenn ein Fehler in meiner CoffeeScript-Schluckuhr auftritt, stoppt sie - offensichtlich nicht das, was ich will.
Wie an anderer Stelle empfohlen, habe ich dies versucht
gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError);
gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError);
function swallowError (error) { error.end(); }
aber es scheint nicht zu funktionieren.
Was mache ich falsch?
Als Antwort auf die Antwort von @ Aperçu habe ich meine swallowError
Methode geändert und stattdessen Folgendes versucht:
gulp.task('scripts', function () {
gulp.src('./app/script/*.coffee')
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('./public/js'))
.on('error', swallowError);
});
Neustart und dann ein Syntaxfehler in meiner Kaffeedatei erstellt. Gleicher Fehler:
[gulp] Finished 'scripts' after 306 μs
stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: W:\bariokart\app\script\trishell.coffee:5:1: error: unexpected *
*
^
at Stream.modifyFile (W:\bariokart\node_modules\gulp-coffee\index.js:37:33)
at Stream.stream.write (W:\bariokart\node_modules\gulp-coffee\node_modules\event-stream\node_modules\through\index.js:26:11)
at Stream.ondata (stream.js:51:26)
at Stream.EventEmitter.emit (events.js:95:17)
at queueData (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:43:21)
at next (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:71:7)
at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:85:7
at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\lib\src\bufferFile.js:8:5
at fs.js:266:14
at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\graceful-fs\graceful-fs.js:104:5
at Object.oncomplete (fs.js:107:15)
Antworten:
Ihre
swallowError
Funktion sollte folgendermaßen aussehen:Ich denke, Sie müssen diese Funktion für den
error
Fall binden, dass die Aufgabe heruntergefallen ist, nicht für diewatch
Aufgabe, da hier nicht das Problem auftritt. Sie sollten diesen Fehlerrückruf für jede Aufgabe festlegen, die möglicherweise fehlschlägt, z. B. für Plugins, die bei Bedarf unterbrochen werden habe ein;
oder etwas anderes verpasst , um zu verhindern, dass diewatch
Aufgabe gestoppt wird.Beispiele:
Wenn es Ihnen nichts ausmacht, ein anderes Modul einzuschließen , können Sie alternativ die Protokollfunktion von gulp-util verwenden , um zu verhindern , dass Sie eine zusätzliche Funktion in Ihrem
gulpfile
:Aber ich kann empfehlen, einen Blick auf das fantastische Gulp-Plumber- Plugin zu werfen, mit dem der
onerror
Handler deserror
Ereignisses entfernt wird, wodurch die Streams unterbrochen werden. Es ist sehr einfach zu bedienen und verhindert, dass Sie alle Aufgaben abfangen, die möglicherweise fehlschlagen.Weitere Informationen hierzu finden Sie in diesem Artikel des Erstellers des betreffenden Plugins.
quelle
gulp.watch()
dass ein fügt.on('error', function() { this.emit('end') })
das Ergebnis der Uhr - Funktion, wie sie speziell die Uhr Aufgabe sind , dass ich zu Aufhängen elastisch machen will. Funktioniert sehr gut und die einzelnen fehlgeschlagenen Aufgaben drucken immer noch ihre eigenen Fehlermeldungen. Siehe den Code: github.com/specious/specious.github.io/commit/f8571d28Die obigen Beispiele haben bei mir nicht funktioniert. Folgendes geschah jedoch:
quelle
Mit einem Dateiformat
(Beispiel: * nur Kaffee)
Wenn Sie nur mit einem Dateiformat arbeiten möchten,
gulp-plumber
ist dies Ihre Lösung.Zum Beispiel reichhaltige Fehler und Warnungen beim Kaffeeskripten:
Mit mehreren Arten von Dateiformaten
(Beispiel: * .coffee und * .js gleichzeitig)
Aber wenn Sie nicht mit mehreren Arten von Dateiformaten arbeiten möchten (zum Beispiel:
*.js
und*.coffee
), werde ich meine Lösung veröffentlichen.Ich werde hier nur einen selbsterklärenden Code mit einer Beschreibung veröffentlichen.
Ich habe mich dem Problem mit
gulp-plumber
undgulp-if
mit gestelltgulp.watch(...
Siehe verwandtes Problem hier: https://github.com/floatdrop/gulp-plumber/issues/23
Die beste Option für mich war also:
merge-stream
(die daraus erstellt wurdenevent-stream
) zu einem zusammen und setze den Job fort (ich habe das zuerst versucht, und es funktioniert gut für mich, daher ist es eine schnellere Lösung als die vorherige).Jeder Teil als Stream und Streams danach zusammenführen
Sie ist der Hauptteil meines Codes:
Jeder Teil als Datei und danach verketten
Wenn dies in Teile unterteilt werden soll, sollte in jedem Teil eine Ergebnisdatei erstellt werden. Zum Beispiel:
PS:
Hier wurden Knotenmodule und Funktionen verwendet:
quelle
Ich verwende gerne Schluck-Klempner, weil er einer Aufgabe einen globalen Listener hinzufügen und eine aussagekräftige Nachricht anzeigen kann.
Referenz: https://scotch.io/tutorials/prevent-errors-from-crashing-gulp-watch
quelle
Ich habe den folgenden Hack als Problemumgehung für https://github.com/gulpjs/gulp/issues/71 implementiert :
Fügen Sie es Ihrer gulpfile.js hinzu und verwenden Sie es folgendermaßen:
Dies fühlt sich für mich wie die natürlichste Fehlerbehandlung an. Wenn überhaupt kein Fehlerbehandler vorhanden ist, wird ein Fehler ausgegeben. Getestet mit Node v0.11.13.
quelle
Eine einfache Lösung hierfür besteht darin,
gulp watch
eine Endlosschleife innerhalb einer Bash- (oder sh-) Shell einzufügen.while true; do gulp; gulp watch; sleep 1; done
Halten Sie die Ausgabe dieses Befehls in einem sichtbaren Bereich auf Ihrem Bildschirm, während Sie Ihr JavaScript bearbeiten. Wenn Ihre Änderungen zu einem Fehler führen, stürzt Gulp ab, druckt den Stack-Trace, wartet eine Sekunde und setzt die Überwachung Ihrer Quelldateien fort. Sie können dann den Syntaxfehler korrigieren, und Gulp zeigt an, ob die Bearbeitung erfolgreich war, indem Sie entweder die normale Ausgabe ausdrucken oder erneut abstürzen (und dann wieder aufnehmen).
Dies funktioniert in einem Linux- oder Mac-Terminal. Wenn Sie Windows verwenden, verwenden Sie Cygwin oder Ubuntu Bash (Windows 10).
quelle
gulp watch
.Typoskript
Das hat bei mir funktioniert. Ich arbeite mit
Typescript
und trennte die zu behandelnde Funktion (um Verwechslungen mitthis
Schlüsselwörtern zu vermeiden )less
. Dies funktioniert auch mitJavascript
.Wenn Sie nun
watch
.less
Dateien ablegen und einerror
Ereignis auftritt,watch
wird das nicht gestoppt und neue Änderungen werden gemäß Ihren Angaben verarbeitetless task
.HINWEIS : Ich habe es mit versucht
l.end();
; es hat jedoch nicht funktioniert. Jedoch,l.emit('end');
total.Ich hoffe das hilft. Viel Glück.
quelle
Das hat bei mir funktioniert ->
Ich habe gerade die Zeile .on ('error', console.error.bind (console)) hinzugefügt, musste aber den Befehl gulp als root ausführen. Ich führe Node Gulp in einer PHP-Anwendung aus, daher habe ich mehrere Konten auf einem Server. Aus diesem Grund bin ich auf das Problem gestoßen, dass Gulp aufgrund von Syntaxfehlern unterbrochen wurde, weil ich Gulp nicht als Root ausgeführt habe ... Vielleicht Klempner und einige der andere Antworten hier hätten für mich funktioniert, wenn ich als root gelaufen wäre. Gutschrift auf den Accio-Code https://www.youtube.com/watch?v=iMR7hq4ABOw für die Antwort. Er sagte, dass es Ihnen durch die Behandlung des Fehlers hilft, festzustellen, in welcher Zeile sich der Fehler befindet und was sich in der Konsole befindet, aber auch verhindert, dass gulp bei einem Syntaxfehler bricht. Er sagte, es sei eine Art leichtes Update, also nicht sicher, ob es für das funktioniert, wonach Sie suchen. Schnelle Lösung, einen Versuch wert. Hoffe das hilft jemandem!
quelle