问题描述
目前 HotCRM 在 Vercel 上偶发或持续出现登录(或首页)请求超时,表现为 60s serverless 函数超时(Error: Function Timeout after 60s)。同样基于 ObjectStack 的 Studio/Spec 项目则没有此问题。
已确认的非根因
- rewrite(所有路由进函数)和静态文件同步 IO 虽然慢,但无法导致稳定 60s 函数卡死。
- AuthPlugin 逻辑正常时不会阻塞。
- 绝大多数业务插件为本地 require 并非外部依赖。
可能原因与待排查点
- 插件初始化有 Promise 永久 pending/死锁
- 某业务插件内有网络、数据库、第三方或编码失误导致的 await 未 resolve。
- 依赖包或 dist 缺失,导致 require/readFileSync fallback 死等
- node_modules 或 packages/*/dist、@object-ui/console/dist 等目录丢失时,fs fallback 或 require 失败未抛错。
- 环境变量未配置或拼写出错
- AUTH_SECRET、Vercel 特有 URL 环境变量缺失未 failfast,卡在 fetch/discovery 环节。
- Vercel Function 配置被仪表盘覆盖
- 项目设置或 Build Output/Install/Build Command 被 UI 配置覆盖,导致实际部署内容与代码预期不符。
- 插件 (init/start) 实现有漏掉异常捕获
- init、start 任何 await 未 reject/resolve 都直接表达为 60s 无响应。
推荐排查/修复策略
- 在
api/[[...route]].ts 及每个 kernel.use/插件 init/use 前后插入详细日志,观察卡死点。
- 检查 pnpm/turbo workspace 构建输出,确保所有 packages/*/dist 和 node_modules 内容完整。
- 在 Vercel 部署流程 (install, build, deploy) 日志中检查 missing module、require fallback 等异常。
- 加强环境变量(如 AUTH_SECRET)failfast 检查,缺失或错误直接 throw。
- 优化所有插件的 init/start,必要时支持 5s 超时保护 + 抛错。
- 参考 Studio 的最简初始化流程,尝试最小复现 + 逐步加回业务插件定位。
目标
- 找到实际阻塞点,移除导致整个 cold start/fn handler 永久等待的隐患。
- 确保登录等核心 API 可用性和函数响应时间稳定 < 10s。
如需辅助撰写日志插桩代码、调试方案可进一步提出。
问题描述
目前 HotCRM 在 Vercel 上偶发或持续出现登录(或首页)请求超时,表现为 60s serverless 函数超时(Error: Function Timeout after 60s)。同样基于 ObjectStack 的 Studio/Spec 项目则没有此问题。
已确认的非根因
可能原因与待排查点
推荐排查/修复策略
api/[[...route]].ts及每个kernel.use/插件 init/use 前后插入详细日志,观察卡死点。目标