如何在Gulp流程中删除指定类型文件?CSS文件删除失败求助
问题:Gulp任务无法删除pub目录下的CSS文件
我在gulpfile.js中想要在任务运行完成后删除pub/目录下的所有.css文件,但尝试多种方法都无法成功,以下是我的代码尝试:
const { src, dest, watch, parallel, series } = require("gulp"); const mPub = "./pub"; const del = require("del"); //...更多依赖、路径和代码... // 这个任务可以正常工作 function genClean() { return del(["pub", "packagedDrive", "embeds"]); } //...更多代码... // 这个任务无法生效 function removeStyleSheets() { return ( del(['pub/**/*.css']) ); } //...更多代码... // BUILD任务 exports.buildProd = series( genClean, parallel( genCSS, genViews.content, removeStyleSheets ) ); // WATCH任务 exports.watcher = series( genClean, parallel( genCSS, genViews.content, removeStyleSheets ), bSync );
基于del API文档,我还尝试了异步写法:
function removeStyleSheets() { return ( (async () => { const deletedFilePaths = await del(['pub/*.css'], {dryRun: true}); console.log('Deleted files:\n', deletedFilePaths.join('\n')); })() ); }
以及:
function removeStyleSheets() { return ( (async () => { const deletedFilePaths = await del(['pub/*.css', '!pub/*.html']); console.log('Deleted files:\n', deletedFilePaths.join('\n')); })() ); }
但pub/目录下的.css文件仍然存在。
解决方案
核心问题:任务执行顺序错误
你把removeStyleSheets和genCSS放在了同一个parallel任务组里,这两个任务会同时启动。也就是说,删除CSS的任务可能在生成CSS的任务还没完成时就已经执行完毕,后续生成的CSS自然不会被删除。
修正步骤:
调整任务执行顺序
将removeStyleSheets移到parallel(genCSS, genViews.content)之后,用series确保CSS生成完成后再执行删除操作:exports.buildProd = series( genClean, parallel( genCSS, genViews.content ), removeStyleSheets // 生成任务完成后再执行删除 ); exports.watcher = series( genClean, parallel( genCSS, genViews.content ), removeStyleSheets, bSync );修正路径与配置问题
- 如果CSS文件存在于pub的子目录中,
pub/*.css仅匹配pub根目录下的CSS文件,需要用pub/**/*.css匹配所有子目录中的CSS。 - 异步写法中的
dryRun: true是模拟删除模式,不会实际删除文件,需要移除该配置才能生效。
- 如果CSS文件存在于pub的子目录中,
简化
removeStyleSheets任务
不需要复杂的异步包装,直接返回del的Promise即可:function removeStyleSheets() { return del(['pub/**/*.css']); }
内容的提问来源于stack exchange,提问作者klewis
相关产品推荐
相关产品推荐

