我想在以下情况下显示通知:
发生错误
当脚本成功执行时
发生错误
当脚本成功执行时
所有通知实际上正在工作,但是即使发生错误,也会始终显示成功通知.
这是我现在的任务:
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().
使用你的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','watch']);
在我的gulp文件中,我实际上将grp中的每一步包装起来,如果这样,流停止处理. (我没有找到一种方法来阻止流程,而不会杀死进程,这违反了IMO的目的).