Gulp image-min - 出错后如何继续?

Gulp image-min - How to continue after an error?

我正在尝试 运行 对包含 1000 多张图像的文件夹执行图像优化任务,不幸的是,其中一些图像已损坏,因此任务一直失败

我已尝试捕获错误并继续,但一旦遇到损坏的图像,它就无法正常工作,然后任务就会中止。有没有办法让它继续 运行ning?

gulp.task('imgCompress', (done) => {
  gulp.src(imgMedia)
    .pipe(imagemin([
       mozjpeg({
         quality: 75
       }),

       pngquant({
         quality: [0.65, 0.80]
       })
    ]))

    .on('error', gutil.log)

    .pipe(gulp.dest(imgMediaDest))
    done();
});

错误:

{ Error: write EPIPE
    at WriteWrap.afterWrite [as oncomplete] (net.js:789:14)
  errno: 'EPIPE',
  code: 'EPIPE',
  syscall: 'write',
  stdout:
   <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff e1 2b 18 45 78 69 66 00 00 4d 4d 00 2a 00 00 00 08 00 0b 01 0f 00 02 00 00 00 06 00 00 ... >,
  stderr: <Buffer >,
  failed: true,
  signal: null,
  cmd:
   '/private/var/www/website/m2/tools-media/node_modules/mozjpeg/vendor/cjpeg -quality 75',
  timedOut: false,
  killed: false,
  message: 'write EPIPE',
  name: 'Error',
  stack:
   'Error: write EPIPE\n    at WriteWrap.afterWrite [as oncomplete] (net.js:789:14)',
  __safety: undefined,
  _stack: undefined,
  plugin: 'gulp-imagemin',
  showProperties: true,
  showStack: false,
  fileName:
   '/private/var/www/website/m2/pub/media/catalog/product/1/i/1img_5232.jpg' }

您应该可以使用 gulp-plumber,它可以让流在发生错误后继续,甚至可以选择自动记录错误消息而不处理 error 事件。

另请注意,您不应在创建流后调用 done,而应在流终止后调用(例如,您可以收听 finish 事件)。但是从任务函数中简单地 return 流更容易。

const plumber = require('gulp-plumber');

gulp.task('imgCompress', () => {
  return gulp.src(imgMedia)
    .pipe(plumber({ errorHandler: true }))
    .pipe(imagemin([
       mozjpeg({
         quality: 75
       }),

       pngquant({
         quality: [0.65, 0.80]
       })
    ]))
    .pipe(gulp.dest(imgMediaDest))
});