我有一个使用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/