gulp-plumber抛出错误然后停止构建。

时间:2015-09-28 22:24:08

标签: javascript gulp

gulp-plumber有问题,因为它会在错误抛出时破坏我的构建。

例如,我使用scss之类的无效语法对padding-left:woah-err进行了更改。水管工在错误的终端通知我。然后我回到scss文件,将更改保存到padding-left:20px;并在终端中获得无响应,看起来我的gulp构建已损坏...要解决我的问题重启gulp。

然而,在我的gulp文件中,如果我将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

2 个答案:

答案 0 :(得分: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))
    [...]
}

希望这个帮助

答案 1 :(得分:0)

我认为因为当错误发生时,Gulp没有收到完成的回调;
您可能需要在任务函数中添加一个完成的参数 如果有错误,您将手动调用done()。 简单:

// 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.....
});

希望有所帮助