为什么新添加的文件不能触发我的gulp-watch任务?

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'));
  });
});
Run Code Online (Sandbox Code Playgroud)

这与第一次运行时的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'));
});
Run Code Online (Sandbox Code Playgroud)

但没有改变.为什么不在触发任务的图像目录中添加文件?

Aka*_*ash 18

添加一个额外的参数{cwd:'./'}gulp.watch为我工作:

gulp.watch('src/js/**/*.js',{cwd:'./'},['scripts']);
Run Code Online (Sandbox Code Playgroud)

要做到这一点,有两件事:

1避免./使用文件/文件夹模式

2确保./值为cwd

祝好运.

参考: - /sf/answers/2404256711/


flo*_*rop 8

很可能这类问题被重定向到凝视包及其内部流程,这会在您的操作系统上运行复杂的观察程序.在这种情况下,您应该传递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'));
    });
});
Run Code Online (Sandbox Code Playgroud)

但是当你有空图像目录时,这个填充不能解决问题.如果你想看它们,传递['images', 'images/**/*']给glob,它会看最初为空的目录.

gulp-plumber在这种情况下你也不需要Ps ,因为watch会重新运行,每次都使用imagemin,即使imagemin弹出错误.

  • 谢谢!我从源/ images /中删除了"./",现在可以使用! (3认同)