Jes*_*ugh 9 gulp gulp-imagemin imagemin gulp-watch
我有一个gulp任务,它使用gulp-imagemin来压缩图像.当我将新文件添加到此目录时,我希望此任务也可以压缩它们.我读到gulp.watch没有触发新文件,我应该尝试gulp-watch所以我这样使用它;
gulp.task('images', function() {
  watch({glob: './source/images/*'}, function (files) {
    return files
      .pipe(plumber())
      .pipe(imagemin({
        progressive: true,
        interlaced: true
      }))
      .pipe(gulp.dest('./www'));
  });
});
这与第一次运行时的gulp.watch相同,但是当我向目录添加新图像时没有任何反应.但是,如果我覆盖现有文件,它会再次运行任务,因此它的行为会有所不同.
关于gulp-watch的文档称为"批处理模式",并说我也可以基于每个文件运行任务,所以我也尝试过这种方式;
gulp.task('images', function() {
  gulp.src('./source/images/*')
    .pipe(watch())
    .pipe(plumber())
    .pipe(imagemin({
      progressive: true,
      interlaced: true
    }))
    .pipe(gulp.dest('./www'));
});
但没有改变.为什么不在触发任务的图像目录中添加文件?
Aka*_*ash 18
添加一个额外的参数{cwd:'./'}在gulp.watch为我工作:
gulp.watch('src/js/**/*.js',{cwd:'./'},['scripts']);
要做到这一点,有两件事:
1避免./使用文件/文件夹模式
2确保./值为cwd
祝好运.
参考: - /sf/answers/2404256711/
很可能这类问题被重定向到凝视包及其内部流程,这会在您的操作系统上运行复杂的观察程序.在这种情况下,您应该传递images/**/*给glob选项,因此gaze将监视images目录中的所有(包括新的)文件:
var gulp = require('gulp');
var watch = require('gulp-watch');
var imagemin = require('gulp-imagemin');
gulp.task('default', function() {
    watch({glob: 'images/**/*'}, function (files) {
      files.pipe(imagemin({
        progressive: true,
        interlaced: true
      }))
      .pipe(gulp.dest('./www'));
    });
});
但是当你有空图像目录时,这个填充不能解决问题.如果你想看它们,传递['images', 'images/**/*']给glob,它会看最初为空的目录.
gulp-plumber在这种情况下你也不需要Ps ,因为watch会重新运行,每次都使用imagemin,即使imagemin弹出错误.