当 gulp-watch 触发的任务失败时,如何捕获异常?

How do I catch exceptions when a task triggered by gulp-watch fails?

我使用下面的 gulp 任务将 less 转换为 css。我启动它一次,并在 less-file 更改后更新 css.

gulp.task('watch-less', function () {

  gulp.watch('app/styles/*.less', function (event) {

    try {
      var filename = event.path;
      gulp.src(filename)
        .pipe(sourcemaps.init())
        .pipe(less())
        .pipe(sourcemaps.write())
        .pipe(gulp.dest('app/styles/'));

    } catch (e) {
      console.log(e);
    }
  });
});

问题:有时,less 会失败并停止并显示类似

的错误消息
events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: Unrecognised input in file 

显然我的 try catch 机制是错误的,我认为它保护了管道构建步骤而不是管道-运行 时间。

问:如何编写 gulp-watch 任务,使其在 less 失败时继续工作?

要么配合活动

gulp.src(filename)
    .pipe(sourcemaps.init())
    .pipe(less())
    .on('error', console.log)
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('app/styles/'));

或使用gulp-plumber:

 var plumber = require('gulp-plumber')

 ...

 gulp.src(filename)
    .pipe(sourcemaps.init())
    .pipe(plumber())
    .pipe(less())
    .pipe(sourcemaps.write())
    .pipe(gulp.dest('app/styles/'));