javascript - 减少错误

标签 javascript gulp less

出于某种原因,我的 gulp 文件已停止输出错误 - 不管我在 less 文件中添加什么,它都会构建并显示我的“less worked”消息 - 我正在拔头发!有什么想法吗?

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') + ')'));
});

最佳答案

您的错误处理程序不是 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;
  }
}

坏.少

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

给定两个输入文件 ok.lessbad.lessless 任务将显示 bad 错误。 lessok.less 的完成消息,最终结果是单个输出文件 out/ok.css

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

这对你有帮助吗?在一般情况下,它应该适用于管道中的任何错误,允许您选择停止管道中的所有其他项目。

关于javascript - 减少错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37274871/

相关文章:

gulp - 我怎样才能更改我的 gulp 文件,以便它在代码库发生更改时运行构建任务?

html - Flash CSS 颜色在先前颜色和新颜色之间

html - Twitter Bootstrap 响应式导航(btn-navbar、icon-bar)颜色变化

javascript - 禁用 div 中的所有 javascript

javascript - 如何使用 fontawesome 图标更改选择标签内的箭头图标。我正在使用 Vue-Cli。我在 main.js 中导入了 fontawesome

javascript - 在 React 组件中将 SVG 字符串转换为图像

javascript - 带有子菜单和平滑滚动的粘性导航

javascript - React - react.render() 上未处理的错误事件

javascript - gulp-foreach 不循环遍历所有文件

jquery - 重用 jquery-ui 框架类中的 css 属性?