[英]Why gulp-watch doesn't delete files
當我從/src
刪除文件時,我試圖使我的gulp-watch任務從/dest
目錄中刪除文件,但這是行不通的。 錯誤在哪里?
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); } }); });
您的destFilePath
指向一個不存在的文件。 如果刪除文件src/img/foo.png
destFilePath
變量最終指向build/foo.png
而不是build/img/foo.png
(這是img
任務放置的位置)。
原因是您要將path.relative()
應用於包含**
imgSrc
。 但是path.relative()
並不能理解glob。 它只是將**
解釋為常規目錄名稱。 因此,您最終將成為一個目錄。
使用path.relative()
時,您需要path.relative()
**
:
if (event.type === 'deleted') {
var filePathFromSrc = path.relative(path.resolve('src/img'), event.path);
var destFilePath = path.resolve(imgDst, filePathFromSrc);
del.sync(destFilePath);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.