当我从/dest
删除文件时,我试图让我的gulp-watch任务删除/src
目录中的文件,但它不起作用。
错误在哪里?
var watch = require('gulp-watch');
var imagemin = require('gulp-imagemin');
var del = require('del');
var pngquant = require('gulp-pngquant');
var imgSrc = 'src/img/**';
var imgDst = 'build/img';
gulp.task('del', function() {
return del('build');
});
gulp.task('img', function() {
return gulp.src(imgSrc)
.pipe(debug({title: 'src'}))
//.pipe(newer(imgDst))
.pipe(imagemin())
.pipe(debug({title: 'imagemin'}))
.pipe(gulp.dest(imgDst))
.pipe(debug({title: 'dest'}));
});
gulp.task('watch', function () {
var watcher = gulp.watch(imgSrc, ['img']);
watcher.on('change', function (event) {
if (event.type === 'deleted') {
var filePathFromSrc = path.relative(path.resolve(imgSrc), event.path);
var destFilePath = path.resolve(imgDst, filePathFromSrc);
del.sync(destFilePath);
}
});
});

答案 0 :(得分:0)
您的destFilePath
指向不存在的文件。如果您删除文件src/img/foo.png
,则destFilePath
变量最终会指向build/foo.png
而不是build/img/foo.png
(这是img
任务所放置的位置)。< / p>
原因是您将path.relative()
应用于包含imgSrc
的{{1}}。但是**
并没有取消整理。它只是将path.relative()
解释为常规目录名称。所以你最终成了一个目录。
使用**
:
**
path.relative()