You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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自然不会被删除。

修正步骤:

  1. 调整任务执行顺序
    将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
    );
    
  2. 修正路径与配置问题

    • 如果CSS文件存在于pub的子目录中,pub/*.css仅匹配pub根目录下的CSS文件,需要用pub/**/*.css匹配所有子目录中的CSS。
    • 异步写法中的dryRun: true是模拟删除模式,不会实际删除文件,需要移除该配置才能生效。
  3. 简化removeStyleSheets任务
    不需要复杂的异步包装,直接返回del的Promise即可:

    function removeStyleSheets() {
      return del(['pub/**/*.css']);
    }
    

内容的提问来源于stack exchange,提问作者klewis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 14:13:10