簡體   English   中英

為什么Gulp-Watch不會刪除文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM