Здесь разбираются модули gulp-notify, gulp-plumber, multipipe, stream-combiner2 (сктинкаст о И. Кантора)
Простейшие примеры (только в видео)
In [ ]:
.on('error', function(err){
console.log(err.message); //весь объект ошибки очень большой
this.end(); // хороший тон в асинхронном пайпе
});
# 4:00 Gulp 8: Обработка ошибок
In [ ]:
.on('error', notify.onError()) //- также выводит ошибку консоль
Добавим внутрь функцию форматирования
In [ ]:
.on('error', notify.onError(function(err){
return {
title: 'styles',
message: err.message
}
}))
Обработчик надо вешать на тот поток, вкотором ошибка, а в оствльных он не поймает. Что делать?
In [ ]:
# 7:00 gulp-plumber Gulp 8: Обработка ошибок
Поток, возвращаемый пламбером содержит обработчик ошибки для каждого текущего пайпа
In [ ]:
'use strict';
const gulp = require('gulp');
const stylus = require('gulp-stylus');
const sourcemaps = require('gulp-sourcemaps');
const debug = require('gulp-debug');
const gulpIf = require('gulp-if');
const del = require('del');
const browserSync = require('browser-sync').create();
const notify = require('gulp-notify');
const plumber = require('gulp-plumber');
const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV == 'development';
gulp.task('styles', function() {
return gulp.src('frontend/styles/main.styl')
.pipe(plumber({
errorHandler: notify.onError(err => ({
title: 'Styles',
message: err.message
}))
}))
.pipe(gulpIf(isDevelopment, sourcemaps.init()))
.pipe(stylus())
.pipe(gulpIf(isDevelopment, sourcemaps.write()))
.pipe(gulp.dest('public'));
});
gulp.task('clean', function() {
return del('public');
});
gulp.task('assets', function() {
return gulp.src('frontend/assets/**', {since: gulp.lastRun('assets')})
.pipe(debug({title: 'assets'}))
.pipe(gulp.dest('public'));
});
gulp.task('build', gulp.series(
'clean',
gulp.parallel('styles', 'assets'))
);
gulp.task('watch', function() {
gulp.watch('frontend/styles/**/*.*', gulp.series('styles'));
gulp.watch('frontend/assets/**/*.*', gulp.series('assets'));
});
gulp.task('serve', function() {
browserSync.init({
server: 'public'
});
browserSync.watch('public/**/*.*').on('change', browserSync.reload);
});
gulp.task('dev',
gulp.series('build', gulp.parallel('watch', 'serve'))
);
In [ ]:
# 10:00 multipipe Gulp 8: Обработка ошибок
In [ ]:
# 12:00 stream-combiner2 Gulp 8: Обработка ошибок
In [ ]:
'use strict';
const gulp = require('gulp');
const stylus = require('gulp-stylus');
const sourcemaps = require('gulp-sourcemaps');
const debug = require('gulp-debug');
const gulpIf = require('gulp-if');
const del = require('del');
const browserSync = require('browser-sync').create();
const notify = require('gulp-notify');
const combiner = require('stream-combiner2').obj;
const isDevelopment = !process.env.NODE_ENV || process.env.NODE_ENV == 'development';
gulp.task('styles', function() {
return combiner(
gulp.src('frontend/styles/main.styl'),
gulpIf(isDevelopment, sourcemaps.init()),
stylus(),
gulpIf(isDevelopment, sourcemaps.write()),
gulp.dest('public')
).on('error', notify.onError());
});
gulp.task('clean', function() {
return del('public');
});
gulp.task('assets', function() {
return gulp.src('frontend/assets/**', {since: gulp.lastRun('assets')})
.pipe(debug({title: 'assets'}))
.pipe(gulp.dest('public'));
});
gulp.task('build', gulp.series(
'clean',
gulp.parallel('styles', 'assets'))
);
gulp.task('watch', function() {
gulp.watch('frontend/styles/**/*.*', gulp.series('styles'));
gulp.watch('frontend/assets/**/*.*', gulp.series('assets'));
});
gulp.task('serve', function() {
browserSync.init({
server: 'public'
});
browserSync.watch('public/**/*.*').on('change', browserSync.reload);
});
gulp.task('dev',
gulp.series('build', gulp.parallel('watch', 'serve'))
);
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий