吞下更少的错误

时间:2016-05-17 11:30:28

标签: javascript gulp less

由于某些原因,我的gulp文件已停止输出错误 - 不管我对我建立的较少文件的广告是什么,并显示我的“工作不太好”。信息 - 我把头发拉了出来!有什么想法吗?

AnyDto

1 个答案:

答案 0 :(得分:3)

您的错误处理程序不是pipe()调用主链的一部分,因此执行始终继续到gulp-notify的最终管道。 Gulp中的错误处理可能很棘手,如下面的概述所示:

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.lessless任务将显示bad.less的错误以及ok.less的已完成消息,其中最终结果是单个输出文件out/ok.css

通过在this.emit('end')函数中注释掉errorHandler行,less任务将显示bad.less的错误消息,然后停止所有进一步处理 - 您最终将没有输出文件。

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