如何仅对新文件和已更改的文件运行gulp imagemin任务?

时间:2017-02-09 11:13:11

标签: gulp gulp-imagemin

我尝试添加如下所示的gulp任务并运行gulp图像,以便它只在添加/更改的文件上运行但是,这似乎不起作用......任何想法?

  gulp.task('images', function (event) {
  switch (event.type)
  {
    case 'added':
    case 'changed':
      gulp.src(event.path)
        return gulp.src(config.images.src)
        .pipe(imagemin({
          optimizationLevel: 5,
          progressive: true,
          svgoPlugins: [{removeViewBox: false}],
          use: [pngcrush()]
        }))
        .pipe(gulp.dest(config.images.dest));
      break;
  }
});

2 个答案:

答案 0 :(得分:4)

您可以使用gulp-newer仅传递较新的文件。

在imagemin之前插入一个管道,目标文件夹作为参数。

gulp.task('images', function (event) {
  gulp.src(event.path)
    return gulp.src(config.images.src)
    .pipe(newer(config.images.dest))
    .pipe(imagemin({
      optimizationLevel: 5,
      progressive: true,
      svgoPlugins: [{removeViewBox: false}],
      use: [pngcrush()]
    }))
    .pipe(gulp.dest(config.images.dest));
});

答案 1 :(得分:1)

除了@Headwiki提到的gulp-newer之外,另一个流行的工具是gulp-changed

根据您的确切需求gulp-newergulp-changed可能会更好......或者对于您的项目,它可能不会有所不同。有关详情,请参阅问题"gulp-newer vs gulp-changed?"