2015-09-28 83 views
0

經與gulp-plumber一個問題,因爲它在一個錯誤擲傷了我的構建。吞嚥水管工拋出錯誤,然後停止建立。

例如,我使用無效語法(如padding-left:woah-err)對我的scss進行了更改。水管工通知我錯誤的終端。然後,我回到scss文件進行更改padding-left:20px;保存,並得到在終端沒有響應,它看起來像我的一飲而盡構建壞了......要解決我柄重啓一飲而盡。

但是,如果我將this.emit('end');更改爲this.emit();,則在我的吞嚥文件中,構建不會中斷,但不會再發生錯誤的水暖工通知。

展望改變了我的路我配置我的管道工得到這個工作的權利。有什麼建議麼?這看起來像good solution

這裏是我的包

var gulp = require('gulp'), 
fs = require('fs'), 
gulpif = require('gulp-if'), // condtionally run task 
plumber = require('gulp-plumber'), // prevent pipe breaking 
browserSync = require('browser-sync').create(), 
bower = require('gulp-bower'), // gulp bower 
concat = require('gulp-concat'), // concat files 
cssmin = require('gulp-minify-css'), // minify css 
rename = require('gulp-rename'), // rename file 
runSequence = require('run-sequence'), // runs gulp tasks in order 
sass = require('gulp-sass'), // css preprocessor 
uglify = require('gulp-uglify'); // minify js 

這是我的風格的任務(必須有人幫助我處理這件事了)..可能要重新考慮它的結構。開放的建議

// Styles Task 
gulp.task('styles', function(){ 
    // streamError is set to false 
    var streamError = false; 
    return gulp.src(paths.source.styles) 
     .pipe(plumber({ 
      // plumber finds errors in stream 
      errorHandeler:function(error){ 
       streamError = error; 
       // plumber logs errors to console and terminal 
       console.log(streamError.message); 
       browserSync.notify(streamError.message,errorTimeout); 
       this.emit('end'); 
      } 
     })) 
     .pipe(sass()) 
     // compile sass 
     .pipe(gulp.dest(paths.destination.styles)) 
     // if the streamError is NOT false reload browser 
     .pipe(gulpif(!streamError,browserSync.reload({stream:true}))) 
     .pipe(cssmin()) // min css 
     .pipe(rename({ // rename file to site.min.css 
      suffix:'.min' 
     })) 
     .pipe(gulp.dest(paths.destination.styles)) 
     // if streamError is not `false` reload browser 
     .pipe(gulpif(!streamError,browserSync.reload({stream:true}))); 
}); 

這裏的錯誤 enter image description here

回答

0

我想是因爲當錯誤發生,咕嘟咕嘟didnt收到成品回調;
您可能需要添加一個做參數去你的任務功能。
如果有錯誤,你會()調用手動完成。 簡單:

// Styles Task 
gulp.task('styles', function(done /** done! **/){ 
    // streamError is set to false 
    var streamError = false; 
    return gulp.src(paths.source.styles) 
     .pipe(plumber({ 
      // plumber finds errors in stream 
      errorHandeler:function(error){ 
       streamError = error; 
       // plumber logs errors to console and terminal 
       console.log(streamError.message); 
       browserSync.notify(streamError.message,errorTimeout); 
       this.emit('end'); 
       done();//call done here! 
      } 
     })) 
     //keep the same..... 
}); 

希望這有助於

1

這解決了這個問題對我來說。

Using gulp-plumber 1.1.0

function onError(err) { 
    console.log(err); //or other way you may prefer to log 
    this.emit('end'); 
} 

gulp.task('myTask', function(){ 
    return gulp 
    .src('myFilePath') 
    .pipe(plumber(onError)) 
    [...] 
} 

希望這有助於