尽管errorHandler回调,但修复了Gulp水管工捕获的错误后,监视任务未继续

尽管errorHandler回调,但修复了Gulp水管工捕获的错误后,监视任务未继续,gulp,gulp-watch,Gulp,Gulp Watch,所以我得到了这个整洁的gulpfile和所有的东西,除了这件事,它工作得很顺利 我正在运行gulp plumber以阻止手表任务因错误而崩溃,错误正在被它捕获,但当我修复错误时,手表师拒绝继续。我添加了handleError回调,但它似乎没有做任何事情,尽管它说应该这样做。这让我发疯,因为我知道有人在没有这些解决方案的情况下让它工作,但我发现的任何解决方案似乎都不起作用。我错过什么了吗 编辑:当我在列表中出现错误时。例如,scss抛出的错误如下所示: [22:04:43] Plumber fou

所以我得到了这个整洁的gulpfile和所有的东西,除了这件事,它工作得很顺利

我正在运行
gulp plumber
以阻止手表任务因错误而崩溃,错误正在被它捕获,但当我修复错误时,手表师拒绝继续。我添加了
handleError
回调,但它似乎没有做任何事情,尽管它说应该这样做。这让我发疯,因为我知道有人在没有这些解决方案的情况下让它工作,但我发现的任何解决方案似乎都不起作用。我错过什么了吗

编辑:当我在
列表中出现错误时。例如,scss
抛出的错误如下所示:

[22:04:43] Plumber found unhandled error:
Error in plugin 'gulp-sass'
Message:
styles\partials\_lists.scss
1:1  invalid top-level expression
这是否意味着我还必须使用('error',function(){})手动处理错误?因为我认为这是管道工的目的,以消除手动错误处理。我甚至尝试用这个手动捕捉错误,但它只是在控制台中吐出错误,并拒绝像以前一样继续

这是水管工的部分:

// Compile our SCSS into minified CSS
gulp.task('styles', function() {
  return gulp.src('styles/main.scss')
    .pipe(plumber({
      handleError: function (err) {
        console.log(err);
        this.emit('end');
      }
    }))
    .pipe(sass({ style: 'expanded' }))
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(gulp.dest('dist/styles'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest('dist/styles'))
    .pipe(notify({ message: 'Finished compiling SCSS' }))
});
下面是整个
gulpfile.js

var gulp         = require('gulp'),
    sass         = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer'),
    minifycss    = require('gulp-minify-css'),
    plumber      = require('gulp-plumber'),
    jshint       = require('gulp-jshint'),
    uglify       = require('gulp-uglify'),
    imagemin     = require('gulp-imagemin'),
    rename       = require('gulp-rename'),
    concat       = require('gulp-concat'),
    notify       = require('gulp-notify'),
    cache        = require('gulp-cache'),
    livereload   = require('gulp-livereload'),
    htmlmin      = require('gulp-htmlmin'),
    del          = require('del');

// Minify our HTML
gulp.task('html', function() {
  return gulp.src('*.html')
    .pipe(htmlmin({ collapseWhitespace: true }))
    .pipe(gulp.dest('dist'))
});

// Compile our SCSS into minified CSS
gulp.task('styles', function() {
  return gulp.src('styles/main.scss')
    .pipe(plumber({
      handleError: function (err) {
        console.log(err);
        this.emit('end');
      }
    }))
    .pipe(sass({ style: 'expanded' }))
    .pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
    .pipe(gulp.dest('dist/styles'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(minifycss())
    .pipe(gulp.dest('dist/styles'))
    .pipe(notify({ message: 'Finished compiling SCSS' }))
});

// Concat and compile our JS into a minified file
gulp.task('scripts', function() {
  return gulp.src('scripts/**/*.js')
    .pipe(jshint())
    .pipe(jshint.reporter('default'))
    .pipe(concat('main.js'))
    .pipe(gulp.dest('dist/scripts'))
    .pipe(rename({ suffix: '.min' }))
    .pipe(uglify())
    .pipe(gulp.dest('dist/scripts'))
    .pipe(notify({ message: 'Finished compiling scripts' }));
});

// Compress our images
gulp.task('images', function() {
  return gulp.src('images/**/*.js')
    .pipe(cache(imagemin({ optimizationLevel: 5, progressive: true, interlaced: true })))
    .pipe(gulp.dest('dist/images'))
    .pipe(notify({ message: 'Finished compiling images' }));
});

// Clean/empty our dist folder
gulp.task('clean', function(cb) {
  del(['dist/styles', 'dist/scripts', 'dist/images'], cb)
});

// Run all our tasks when using 'gulp' command in CLI
gulp.task('default', ['clean'], function() {
  gulp.start('html', 'styles', 'scripts', 'images');
});

// Watch our files for changes
gulp.task('watch', function() {
  gulp.watch('styles/**/*.scss', ['styles']);
  gulp.watch('scripts/**/*.js', ['scripts']);
  gulp.watch('images/**/*', ['images']);
});

这可能只是一个打字错误


尝试将
handleError
替换为
errorHandler

完全相同的问题,只是解决了它。魅力在于增加

this.emit('end')


在处理程序的末尾,您可以优雅地结束任务。

这里的问题与此相同,似乎在此提交中发生了更改: