Gulp中cleanRoot任务执行完成后进程未自动退出问题求助
你的任务代码本身逻辑是正常的,控制台输出也确认cleanRoot任务已经执行完毕,进程卡住只是因为Node.js事件循环中仍有活跃的句柄(比如未释放的模块引用、文件句柄、定时器等),没有被Gulp自动回收,针对这个场景的解决方案如下:
- 方案1:修改gulp启动命令,添加
--exit参数
直接修改package.json中的clean脚本,任务执行完成后会强制终止进程,无需修改业务代码:{ "scripts": { "clean": "gulp cleanRoot --exit" } } - 方案2:任务逻辑中主动退出进程
如果你不想修改启动命令,可以调整cleanRoot任务的逻辑,文件删除完成后主动触发进程退出:import del from 'del'; import { projectFolder } from '../config'; const cleanRoot = async () => { await del(projectFolder); process.exit(0); }; export default cleanRoot; - 方案3:排查残留句柄来源
如果以上方案你不想用,想定位根本原因:- 先排查
../config配置文件,是否有初始化定时器、网络连接、文件监听这类不会自动释放的逻辑 - 检查del版本,如果使用的是v7及以上纯ESM版本,可尝试降级到del@6兼容版本,避免模块加载导致的句柄残留
- 你当前引入的
@babel/register也可能持有文件引用未释放,可以尝试升级或降级babel相关依赖版本验证
- 先排查
内容的提问来源于stack exchange,提问作者SineYlo
相关产品推荐
相关产品推荐

