用gulp-notify和gulp-plumber处理错误 [英] Error handling with gulp-notify and gulp-plumber

查看:103
本文介绍了用gulp-notify和gulp-plumber处理错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在以下情况下显示通知:

1.发生错误

2.脚本成功执行时

I want to display a notification when:
1. An error occurs
2. When the script was successfully executed

所有通知实际上都在工作,但即使发生错误,也会始终显示成功通知。

All notifications are actually working but the success notification is always displayed, even when there is an error.

如何确保

这是我当前的任务:

This is my current task:

var gulp = require('gulp');
var sass = require('gulp-ruby-sass');
var rename = require('gulp-rename');
var notify = require('gulp-notify');
var plumber = require('gulp-plumber');
var minifycss = require('gulp-minify-css');
var autoprefixer = require('gulp-autoprefixer');

gulp.task('sass', function(){
   return gulp.src('assets/scss/global.scss')
       .pipe(plumber({errorHandler: notify.onError("Error: <%= error.message %>")}))
       .pipe(sass({ style: 'expanded' }))
       .pipe(autoprefixer())
       .pipe(gulp.dest('assets/css/'))
       .pipe(rename({suffix: '.min'}))
       .pipe(minifycss())
       .pipe(gulp.dest('assets/css/'))
       .pipe(notify({
           title: 'Gulp',
           subtitle: 'success',
           message: 'Sass task',
           sound: "Pop"
       }));
});

gulp.task('watch', function(){
   gulp.watch('assets/scss/**/*.scss', ['sass']);
});

gulp.task('default', ['sass', 'watch']);


推荐答案

我遇到同样的问题, gulp-if和一个自定义错误处理程序。基本上,我在错误出现的时候设置了 errorFree = false ,然后在显示成功消息的时候使用 gulp-if 来确定是否调用 notify()

I encountered the same issue and what worked for me was gulp-if and a custom error handler. Basically, I set errorFree = false when an error is thrown then at the end when it's time to show the success message I use gulp-if to determine if notify() gets called or not.

使用您的gulp文件:

Working with your gulpfile:

var gulp = require('gulp');
var sass = require('gulp-ruby-sass');
var rename = require('gulp-rename');
var notify = require('gulp-notify');
var plumber = require('gulp-plumber');
var minifycss = require('gulp-minify-css');
var autoprefixer = require('gulp-autoprefixer');

gulp.task('sass', function(){

    var onError = function(err) {
        notify.onError({
                    title:    "Gulp",
                    subtitle: "Failure!",
                    message:  "Error: <%= error.message %>",
                    sound:    "Beep"
                })(err);

        this.emit('end');
    };

   return gulp.src('assets/scss/global.scss')
       .pipe(plumber({errorHandler: onError}))
       .pipe(sass({ style: 'expanded' }))
       .pipe(autoprefixer())
       .pipe(gulp.dest('assets/css/'))
       .pipe(rename({suffix: '.min'}))
       .pipe(minifycss())
       .pipe(gulp.dest('assets/css/'))
       .pipe(notify({ // Add gulpif here
           title: 'Gulp',
           subtitle: 'success',
           message: 'Sass task',
           sound: "Pop"
       }));
});

gulp.task('watch', function(){
   gulp.watch('assets/scss/**/*.scss', ['sass']);
});

gulp.task('default', ['sass', 'watch']);

在我的gulp文件中,我实际上将每一步包含在 gulp-if ,以便流停止处理。 (我没有找到一种方法来停止流而不杀死进程,这违背了IMO的目的。)

In my gulpfile I actually wrap each step in gulp-if so that the stream stops processing. (I haven't found a way to stop the stream without killing the process, which defeats the purpose of watch IMO.)

这篇关于用gulp-notify和gulp-plumber处理错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆