[英]Error handling with gulp-notify and gulp-plumber
我希望在以下情況下顯示通知:
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']);
我遇到了同樣的問題,對我有用的是gulp-if和自定義錯誤處理程序。 基本上,我在拋出errorFree = false
時設置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',
subtitle: 'success',
message: 'Sass task',
sound: "Pop"
}));
});
gulp.task('watch', function(){
gulp.watch('assets/scss/**/*.scss', ['sass']);
});
gulp.task('default', ['sass', 'watch']);
在我的gulp文件中,我實際上將每一步都包裝在gulp中gulp-if
這樣流停止處理。 (我沒有找到一種方法來阻止流而不會破壞流程,這會使觀看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' ) );
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.