gulp - 为什么新添加的文件不会触发我的“大吃一惊”任务?

标签 gulp gulp-imagemin imagemin gulp-watch

我有一个使用gulp-imagemin压缩图像的gulp任务。当我将新文件添加到该目录时,我也希望该任务也将其压缩。我读了gulp.watch doesn't trigger on new files,我应该尝试用口吃的 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'));
});

但是什么都没有改变。为什么不将文件添加到我的图像目录中会触发任务?

最佳答案

这类问题很可能被重定向到gaze软件包及其内部进程,该软件包在您的OS上运行复杂的监视程序。在这种情况下,您应该将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,它将监视最初为空的目录。

P.s.在这种情况下,您也不需要gulp-plumber,因为watch将重新运行函数,即使imagemin弹出错误,每次也会使用imagemin。

关于gulp - 为什么新添加的文件不会触发我的“大吃一惊”任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24296839/

相关文章:

javascript - 如何将缓冲区传递给node.js中的imagemin模块?

node.js - 无法使用 imageminMozjpeg 压缩大文件?

yeoman :找不到 'imagemin-jpegtran'

javascript - 输入文件的目录结构在输出时变平

javascript - 用 gulp/imagemin 替换子文件夹中的文件

javascript - 从 Jasmine 测试中引用 JavaScript 文件

gulp - 在 Windows 上安装 gulp-imagemin 会创建超过 10,000 个文件

javascript - 使用 Gulp 按顺序连接脚本

node.js - 在 Gulp 中捕获所有未处理的错误