Saya menjalankan tegukan 3.6.2 dan memiliki tugas berikut yang telah diatur dari sampel online
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']);
});
Setiap kali ada kesalahan dalam jam tangan CoffeeScript saya berhenti - jelas bukan yang saya inginkan.
Seperti yang direkomendasikan di tempat lain saya mencoba ini
gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError);
gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError);
function swallowError (error) { error.end(); }
tapi sepertinya itu tidak berhasil.
Apa yang saya lakukan salah?
Menanggapi jawaban @ Aperçu saya memodifikasi swallowError
metode saya dan mencoba yang berikut:
gulp.task('scripts', function () {
gulp.src('./app/script/*.coffee')
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('./public/js'))
.on('error', swallowError);
});
Mulai ulang, lalu buat kesalahan sintaksis dalam file kopi saya. Masalah yang sama:
[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)
Jawaban:
swallowError
Fungsi Anda akan terlihat seperti ini:Saya pikir Anda harus mengikat fungsi ini
error
jika ada tugas yang jatuh, bukanwatch
tugas, karena bukan itu masalahnya, Anda harus mengatur kesalahan panggil balik ini pada setiap tugas yang mungkin gagal, seperti plugin yang rusak saat Anda memiliki melewatkan;
atau sesuatu yang lain, untuk mencegahwatch
tugas berhenti.Contoh:
Sebagai alternatif, jika Anda tidak keberatan untuk memasukkan modul lain, Anda dapat menggunakan fungsi log dari gulp-util agar Anda tidak mendeklarasikan fungsi tambahan di
gulpfile
:Tetapi saya dapat merekomendasikan untuk melihat pada plugin gulp-tukang ledeng yang mengagumkan , yang digunakan untuk menghapus
onerror
handler darierror
acara tersebut, menyebabkan pecahnya aliran. Ini sangat mudah digunakan dan menghentikan Anda dari menangkap semua tugas yang mungkin gagal.Info lebih lanjut tentang ini pada artikel ini oleh pembuat plugin yang bersangkutan.
sumber
gulp.watch()
yang menambahkan.on('error', function() { this.emit('end') })
pada hasil fungsi arloji, karena secara khusus tugas arloji yang saya ingin tangguh untuk menutup telepon. Bekerja dengan sangat baik, dan tugas-tugas individual yang gagal masih mencetak pesan kesalahan mereka sendiri. Lihat kode: github.com/specious/specious.github.io/commit/f8571d28Contoh di atas tidak berhasil untuk saya. Namun berikut ini:
sumber
Dengan satu format file
(mis .: * .kopi saja)
Jika Anda ingin bekerja hanya dengan satu format file, maka
gulp-plumber
solusi Anda.Misalnya kaya kesalahan yang ditangani dan peringatan untuk skrip kopi:
Dengan berbagai jenis format file
(mis: * .kopi dan * .js pada saat bersamaan)
Tetapi jika Anda tidak akan bekerja dengan banyak jenis format file (misalnya:
*.js
dan*.coffee
), maka saya akan memposting solusi saya.Saya hanya akan memposting kode penjelasan sendiri di sini, dengan beberapa deskripsi sebelumnya.
Saya menghadapi masalah dengan
gulp-plumber
dangulp-if
menggunakangulp.watch(...
Lihat masalah terkait di sini: https://github.com/floatdrop/gulp-plumber/issues/23
Jadi pilihan terbaik bagi saya adalah:
merge-stream
(yang dibuat darievent-stream
) menjadi satu dan melanjutkan pekerjaan (saya mencoba yang pertama, dan itu berfungsi dengan baik bagi saya, jadi ini solusi yang lebih cepat daripada yang sebelumnya)Setiap bagian sebagai aliran, dan menggabungkan aliran setelah
Dia adalah bagian utama dari kode saya:
Setiap bagian sebagai file, dan digabung setelahnya
Jika untuk memisahkan ini menjadi bagian-bagian, maka di setiap bagian harus ada file hasil yang dibuat. Untuk ex .:
PS:
Di sini simpul modul dan fungsi yang digunakan:
sumber
Saya suka menggunakan tukang ledeng karena dapat menambah pendengar global ke tugas dan memiliki pesan yang berarti ditampilkan.
Referensi: https://scotch.io/tutorials/prevent-errors-from-crashing-gulp-watch
sumber
Saya telah menerapkan peretasan berikut sebagai solusi untuk https://github.com/gulpjs/gulp/issues/71 :
Tambahkan ke gulpfile.js Anda dan gunakan seperti itu:
Ini terasa seperti penanganan kesalahan yang paling alami bagi saya. Jika tidak ada penangan kesalahan sama sekali, itu akan melempar kesalahan. Diuji dengan Node v0.11.13.
sumber
Solusi sederhana untuk ini adalah dengan memasukkan
gulp watch
loop tak terbatas dalam shell Bash (atau sh).while true; do gulp; gulp watch; sleep 1; done
Simpan output dari perintah ini di area yang terlihat di layar Anda saat Anda mengedit JavaScript. Ketika hasil edit Anda menghasilkan kesalahan, Gulp akan macet, cetak jejak tumpukannya, tunggu sebentar, dan lanjutkan menonton file sumber Anda. Anda kemudian dapat memperbaiki kesalahan sintaksis, dan Gulp akan menunjukkan apakah pengeditannya berhasil atau tidak dengan mencetak output normalnya, atau menabrak (lalu melanjutkan) lagi.
Ini akan bekerja di terminal Linux atau Mac. Jika Anda menggunakan Windows, gunakan Cygwin atau Ubuntu Bash (Windows 10).
sumber
gulp watch
.Naskah
Inilah yang bekerja untuk saya. Saya bekerja dengan
Typescript
dan memisahkan fungsi (untuk bingung denganthis
kata kunci) untuk menanganiless
. Ini bekerja denganJavascript
baik.Sekarang, ketika Anda
watch
.less
file, dan suatuerror
terjadi,watch
tidak akan berhenti dan perubahan baru akan diproses sesuai Andaless task
.CATATAN : Saya mencoba dengan
l.end();
; Namun, itu tidak berhasil. Namun,l.emit('end');
benar-benar berfungsi.Semoga bantuan ini. Semoga berhasil.
sumber
Ini bekerja untuk saya ->
Saya baru saja menambahkan baris .on ('error', console.error.bind (console)), tetapi saya harus menjalankan perintah gulp sebagai root. Saya menjalankan simpul tegukan pada aplikasi php jadi saya memiliki beberapa akun di satu server, itulah sebabnya saya mengalami masalah teguran pada kesalahan sintaks karena saya tidak menjalankan tegukan sebagai root ... Mungkin tukang ledeng dan beberapa jawaban lain di sini akan bekerja untuk saya jika saya berlari sebagai root. Kredit ke Kode Accio https://www.youtube.com/watch?v=iMR7hq4ABOw untuk jawabannya. Dia mengatakan bahwa dengan menangani kesalahan itu membantu Anda untuk menentukan baris apa kesalahan itu aktif dan apa yang ada di konsol, tetapi juga berhenti menelan mematahkan kesalahan sintaks. Dia mengatakan itu semacam perbaikan ringan, jadi tidak yakin apakah itu akan berhasil untuk apa yang Anda cari. Perbaikan cepat, layak dicoba. Semoga ini bisa membantu seseorang!
sumber