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

如何仅对新文件和更改的文件运行gulp imagemin任务?,gulp,gulp-imagemin,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) .p

我尝试添加一个像下面这样的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;
  }
});
您可以使用仅传递较新的文件

将目标文件夹作为参数,在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));
});

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


根据您的具体需要,
gulp newer
gulp changed
可能会更好……或者对于您的项目来说,可能不会有什么不同。有关这方面的更多信息,请参见问题

听起来不错。但是,如果文件发生更改,但不完全是一个全新的文件,该怎么办?这行吗?它使用修改后的时间来确定src文件是否比dest文件新。因此,如果文件更改更新了修改的时间,那么是的,它会工作。我认为如果您发送一个路径,如果任何文件已更改,则每个文件都将通过管道传输。