Я запускаю gulp 3.6.2 и имею следующую задачу, которая была настроена из примера онлайн
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']);
});
Каждый раз, когда происходит ошибка в моих остановках на CoffeeScript, очевидно, не то, что я хочу.
Как рекомендовано в другом месте, я попробовал это
gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError);
gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError);
function swallowError (error) { error.end(); }
но это не похоже на работу.
Что я делаю не так?
В ответ на ответ @ Aperçu я изменил свой swallowError
метод и попробовал следующее:
gulp.task('scripts', function () {
gulp.src('./app/script/*.coffee')
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('./public/js'))
.on('error', swallowError);
});
Перезапустил, а затем создал синтаксическую ошибку в моем файле кофе. Та же проблема:
[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)
Ответы:
Ваша
swallowError
функция должна выглядеть так:Я думаю, что вы должны привязать эту функцию к
error
событию, которое выпало из задачи, а не кwatch
задаче, потому что проблема не в этом, вы должны устанавливать этот обратный вызов ошибки для каждой задачи, которая может дать сбой, например, плагинов, которые ломаются, когда у вас есть пропустил;
или что-то еще, чтобы предотвратитьwatch
задачу остановить.Примеры :
В качестве альтернативы, если вы не против включить другой модуль, вы можете использовать функцию log в gulp-util, чтобы удержать вас от объявления дополнительной функции в вашем
gulpfile
:Но я могу порекомендовать взглянуть на удивительный плагин gulp-plumber , который используется для удаления
onerror
обработчикаerror
события, вызывающего разрыв потоков. Он очень прост в использовании и не дает вам поймать все задачи, которые могут быть не выполнены.Подробнее об этом в этой статье создатель соответствующего плагина.
источник
gulp.watch()
которая добавляет.on('error', function() { this.emit('end') })
результат функции часов, так как именно эту задачу я хочу сделать устойчивой к зависанию. Работает действительно хорошо, и отдельные задачи, которые не выполняются, все еще печатают свои собственные сообщения об ошибках. Посмотрите код: github.com/specious/specious.github.io/commit/f8571d28Приведенные выше примеры не работают для меня. Следующее сделал хотя:
источник
С одним форматом файлов
(например: * .coffee only)
Если вы хотите работать только с одним форматом файлов, то
gulp-plumber
это ваше решение.Например, ошибки с богатой обработкой и предупреждение для написания кофе:
С несколькими типами форматов файлов
(например: * .coffee и * .js одновременно)
Но если вы не будете работать с несколькими типами форматов файлов (например:
*.js
и*.coffee
), тогда я опубликую свое решение.Я просто опубликую понятный код здесь с некоторым описанием ранее.
Я встал вопрос с
gulp-plumber
иgulp-if
использованиемgulp.watch(...
См. Связанную проблему здесь: https://github.com/floatdrop/gulp-plumber/issues/23
Так что лучшим вариантом для меня было:
merge-stream
(который был сделан изevent-stream
), в один и продолжайте работу (я попробовал это сначала, и это прекрасно работает для меня, так что это более быстрое решение, чем предыдущий)Каждая часть как поток, а слияние потоков после
Она является основной частью моего кода:
Каждая часть в виде файла, и объединить после
Если разделить это на части, то в каждой части должен быть создан файл результатов. Например:
PS:
Здесь были использованы узлы модулей и функций:
источник
Мне нравится использовать gulp plumber, потому что он может добавить глобального слушателя к задаче и отображать значимое сообщение.
Ссылка: https://scotch.io/tutorials/prevent-errors-from-crashing-gulp-watch
источник
В качестве обходного пути для https://github.com/gulpjs/gulp/issues/71 я реализовал следующий хак :
Добавьте его в свой gulpfile.js и используйте так:
Это похоже на самую естественную обработку ошибок для меня. Если вообще нет обработчика ошибок, он выдаст ошибку. Протестировано с Node v0.11.13.
источник
Простым решением этого является
gulp watch
создание бесконечного цикла внутри оболочки Bash (или sh).while true; do gulp; gulp watch; sleep 1; done
Сохраняйте вывод этой команды в видимой области на экране, пока вы редактируете свой JavaScript. Когда ваши изменения приводят к ошибке, Gulp вылетает, печатает трассировку стека, ждет секунду и возобновляет просмотр ваших исходных файлов. Затем вы можете исправить синтаксическую ошибку, и Gulp укажет, было ли редактирование успешным, либо распечатав его нормальный вывод, либо снова выйдя из строя (затем возобновив).
Это будет работать в терминале Linux или Mac. Если вы используете Windows, используйте Cygwin или Ubuntu Bash (Windows 10).
источник
gulp watch
.Машинопись
Это то, что сработало для меня. Я работаю с
Typescript
этой функцией и разделяю ее (до путаницы сthis
ключевыми словами)less
. Это работает с темJavascript
же.Теперь, когда вы
watch
.less
файлы, иerror
происходит,watch
не будет останавливаться и новые изменения будут обрабатываться в соответствии с вашимless task
.ПРИМЕЧАНИЕ : я пробовал с
l.end();
; Однако это не сработало. Тем не менее,l.emit('end');
полностью работает.Надеюсь, это поможет. Удачи.
источник
Это сработало для меня ->
Я просто добавил строку .on ('error', console.error.bind (console)), но мне пришлось запустить команду gulp от имени пользователя root. Я запускаю gulp узла в приложении php, поэтому у меня есть несколько учетных записей на одном сервере, поэтому я столкнулся с проблемой взлома gulp из-за синтаксических ошибок, потому что я не запускал gulp от имени root ... Может быть, сантехник и некоторые из другие ответы здесь работали бы для меня, если бы я работал от имени пользователя root. Благодарим за код Accio https://www.youtube.com/watch?v=iMR7hq4ABOw за ответ. Он сказал, что, обрабатывая ошибку, он помогает вам определить, в какой строке находится ошибка, и какая она есть в консоли, но также не дает глотку нарушить синтаксическую ошибку. Он сказал, что это было довольно легкое решение, так что не уверен, что это сработает для того, что вы ищете. Быстрое решение, хотя, стоит попробовать. Надеюсь, это поможет кому-то!
источник