9

我有一个使用 gulp-imagemin 压缩图像的 gulp 任务。当我向这个目录添加新文件时,我希望这个任务也能压缩它们。我读到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'));
});

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

4

2 回答 2

18

添加一个额外的参数{cwd:'./'}gulp.watch我有用:

gulp.watch('src/js/**/*.js',{cwd:'./'},['scripts']);

让这个工作的两件事:

1避免./在文件/文件夹模式中

2确保./cwd

祝你好运。

参考:- https://stackoverflow.com/a/34346524/4742733

于 2016-06-11T14:00:57.680 回答
8

此类问题很可能被重定向到凝视程序包及其内部进程,这些程序在您的操作系统上运行复杂的观看程序。在这种情况下,您应该传递images/**/*给 glob 选项,因此凝视将观察图像目录中的所有(包括新的)文件:

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,它将观看最初为空的目录。

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

于 2014-06-19T02:59:53.420 回答