2016-05-17 64 views
1

由于某种原因,我的一大堆文件已经停止输出错误 - 不管我什么广告给我的少文件它建立并显示我的'不太工作'的信息 - 我拉我的头发!请有想法吗?Gulp更少错误

var gulp = require('gulp'); 
var cleanCSS = require('gulp-clean-css'); 
var less = require('gulp-less'); 
var autoprefixer = require('gulp-autoprefixer'); 
var notify = require('gulp-notify'); 
var gutil = require('gulp-util'); 
var sourcemaps = require('gulp-sourcemaps'); 
var liveReload = require('gulp-livereload'); 
var path = require('path'); 
var moment = require('moment') 

gulp.task('less', function() { 
    return gulp.src('./_dev/less/styles.less') 
    .pipe(less({ 
     paths: [ path.join(__dirname, 'less', 'includes') ] 
    })) 
.pipe(less().on('error', function(err){ 
    gutil.log(err); 
    this.emit('end'); 
})) 
.pipe(liveReload()) 
.pipe(gulp.dest('./_dev/css')) 
.pipe(notify('Less worked at (' + moment().format('MMM Do h:mm:ss A') + ')')); 
}); 
+0

那么......实际的错误呢? –

回答

3

你的错误处理程序不是pipe()呼叫的主链的一部分,所以执行总是进行到最后一管gulp-notify。错误处理咕嘟咕嘟可能会非常棘手,如下面的概述表明:

Error management in gulp

要正确处理这个你应该使用gulp-plumber来处理错误,如:

Gulpfile.js

'use strict' 

const gulp = require('gulp') 
const $ = require('gulp-load-plugins')() 
const del = require('del') 

// ------------------------------------------------------------ 

gulp.task('clean', done => { 
    del([ './out/**' ]).then(paths => { 
    done() 
    }) 
}) 

// ------------------------------------------------------------ 

gulp.task('less', [ 'clean' ], function() { 
    return gulp.src('./*.less') 
    .pipe($.plumber({ 
     errorHandler (err) { 
     $.notify.onError('Error: <%= error.message %>')(err) 
     this.emit('end') 
     } 
    })) 
    .pipe($.less()) 
    .pipe(gulp.dest('./out')) 
    .pipe($.notify('Finished: <%= file.relative %>')) 
}) 

// ------------------------------------------------------------ 

gulp.task('default', [ 'less' ]) 

ok.less

@col: #05f; 
div { 
    font-size: 12pt; 
    a { 
    color: @col; 
    } 
} 

bad.less

@col: #05f; 
div { 
    font-size: 12pt; 
    a { 
    color: @link-col; 
    } 
} 

鉴于两个输入文件ok.lessbad.less,该less任务将显示bad.less错误和ok.less完成的消息,与最终的结果单个输出文件out/ok.css

通过在errorHandler功能注释掉线this.emit('end'),该less任务,而不是显示错误消息bad.less,然后停止所有进一步的处理 - 您将结束没有输出文件的。

这对你有帮助吗?它应该在一般情况下适用于您的管道中的任何错误,如果您愿意,可以停止管道中的所有其他项目。

+0

多数民众赞成 - 很感谢您的帮助 – Dancer