使用gulp notify和gulp水管工处理错误

使用gulp notify和gulp水管工处理错误,gulp,Gulp,我想在以下情况下显示通知: 1.出现错误 2.脚本成功执行时 所有通知实际上都在工作,但即使出现错误,也始终显示成功通知 如何确保仅在未发生错误时显示成功通知 这是我目前的任务: var gulp = require('gulp'); var sass = require('gulp-ruby-sass'); var rename = require('gulp-rename'); var notify = require('gulp-notify'); var plumber = requir

我想在以下情况下显示通知:
1.出现错误
2.脚本成功执行时

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

如何确保仅在未发生错误时显示成功通知

这是我目前的任务:

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']);
var gulp=require('gulp');
var sass=require('gulp-ruby-sass');
var rename=require('gulp-rename');
var notify=需要('gulp-notify');
var管道工=需要(“大口管道工”);
var minifycss=require('gulp-minify-css');
var autoprefixer=require('gulp-autoprefixer');
gulp.task('sass',function(){
return gulp.src('assets/scss/global.scss')
.pipe(水管工({errorHandler:notify.onError(“错误:)}))
.pipe(sass({style:'expanded'}))
.pipe(autoprefixer())
.pipe(gulp.dest('assets/css/'))
.pipe(重命名({后缀:'.min'}))
.pipe(minifycss())
.pipe(gulp.dest('assets/css/'))
.管道(通知({
标题:“咕噜咕噜”,
副标题:"成功",,
消息:“Sass任务”,
声音:“流行”
}));
});
吞咽任务('watch',function(){
狼吞虎咽的手表('assets/scss/***.scss',['sass']);
});
吞咽任务('default',['sass','watch']);

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

使用您的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']);
var gulp=require('gulp');
var sass=require('gulp-ruby-sass');
var rename=require('gulp-rename');
var notify=需要('gulp-notify');
var管道工=需要(“大口管道工”);
var minifycss=require('gulp-minify-css');
var autoprefixer=require('gulp-autoprefixer');
gulp.task('sass',function(){
var onError=函数(err){
通知一个错误({
标题:“大口喝”,
副标题:“失败!”,
信息:“错误:”,
声音:“嘟嘟”
})(呃);
这个.emit('end');
};
return gulp.src('assets/scss/global.scss')
.管道(管道工({errorHandler:onError}))
.pipe(sass({style:'expanded'}))
.pipe(autoprefixer())
.pipe(gulp.dest('assets/css/'))
.pipe(重命名({后缀:'.min'}))
.pipe(minifycss())
.pipe(gulp.dest('assets/css/'))
.pipe(通知({//在此处添加gulpif
标题:“咕噜咕噜”,
副标题:"成功",,
消息:“Sass任务”,
声音:“流行”
}));
});
吞咽任务('watch',function(){
狼吞虎咽的手表('assets/scss/***.scss',['sass']);
});
吞咽任务('default',['sass','watch']);

在我的gulpfile中,我实际上将每一步都包装在
gulpif
中,以便流停止处理。(我还没有找到一种在不终止进程的情况下停止流的方法,这违背了watch IMO的目的。)

我最近遇到了一个非常类似的情况,代码Jeffwa 如果你能帮助我工作;但是我正在编译和合并几个文件,并且在错误和“成功”通知被触发方面遇到了问题

如果其他人遇到类似情况,我发现的解决方案是在成功通知上创建一个函数,如果出现错误或信息对象,则返回false。这是代码示例

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

    var errorFree = true;

    var onError = function(err) {

        errorFree = false;

        var subtitle = "Error";
        var message = error.message;

        notify.onError({
            title:    "Gulp",
            subtitle: subtitle,
            message:  message,
            sound: false
        })(err);

        this.emit('end');
    };

    //themeCssFiles is an array with the css files to be compiled/merged.
    return gulp.src( themeCssFiles )
        .pipe( plumber({
            errorHandler: onError,
        }) )
        .pipe( gulpIf("*.scss", compass({
            config_file: './compass-config.rb',
            sass: 'scss',
            css: outputCSS + "/compass"
        }) ) )
        .pipe( concatCss('theme.css', {
            rebaseUrls: false
        } ) )
        .pipe( notify( function(f) {
            return errorFree ? {
                title: 'Gulp',
                subtitle: 'success',
                message: 'SCSS ready',
            }
            : false ;
        }))
        .pipe( gulp.dest( 'dist/css' ) );
});

谢谢,我会尝试一下。今天早上在这个问题上做了更多的工作,我意识到我的解决方案忘记调用
this.emit('end')
onError
功能中。我对它进行了编辑以反映这一点。我在这方面做了更多的工作,因为我原来的解决方案似乎不正确。原来
这个.emit('end')
就是所需要的。我已经删除了
gulp-f
和(现在)不必要的变量和助手方法。现在,我的答案是它在本地gulpfile.js中的具体情况,并且可以按需要工作(错误时会发出错误通知,否则会发出成功消息)。使用“message:err.toString()”,错误消息将提供更多信息