Поиск по этому блогу

пятница, 24 июня 2016 г.

К скринкасту Gulp 8: Обработка ошибок

Здесь разбираются модули 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'))
);


Посты чуть ниже также могут вас заинтересовать

Комментариев нет: