2016-05-17 65 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