-
Notifications
You must be signed in to change notification settings - Fork 1
Labels
bugSomething isn't workingSomething isn't working
Description
问题背景
当前 Vercel 构建 @object-ui/console 应用经常出现 OOM(内存溢出)导致构建失败。之前尝试通过降低 turbo 并发(--concurrency=2)和提升 Node 堆内存(NODE_OPTIONS=--max-old-space-size=4096)解决,但会引发构建超时问题。
经重新评估,根因及最佳优化方案如下:
1. 核心原因分析
- Vite/Rollup 构建环节消耗大量内存
- Vite 配置 resolve.alias 指向 25+ 个 workspace package 的 src 源码,导致整个 monorepo 直接被 Vite/Rollup 一次性 AST 分析、tree-shake 和打包,单进程内存峰值可达 4-5GB。
- 打包阶段同时启用
gzip、brotli等压缩插件和rollup-plugin-visualizer(分析可视化),内存再叠加 1-1.5GB。 - turbo/turbo run 主要带来额外的 tsc 编译进程(并行数量大于 Vercel 平台合理承载数)。
2. 建议优化措施
- Vercel/CI 环境禁用 memory-hungry 插件
- 不在 Vercel 环境下运行 visualizer/temp stats 或 bundle 压缩插件(构建产物交由 CDN 自动压缩)。
- 通过
process.env.VERCEL判断环境,CI 构建时跳过。
- 生产构建尽可能依赖预编译包(dist/)
- resolve.alias 只在开发环境开启,生产构建直接依赖各包的 dist/ 出口,避免重复全量编译。
- 若需 workspace alias,尽量指向 dist/ 而非 src/。
- 确认 turbo & Vite 构建步骤分工
- 若 alias 均指向 dist/,保留 turbo build 阶段;否则减去冗余步骤,提升构建速度并减缓内存压力。
3. 推荐 action
- 关闭现有的"降并发+扩堆内存"方案(PR fix: prevent Vercel OOM by limiting turbo concurrency and increasing Node heap #974)。
- 新建 PR,按上面建议拆分 vite config(区分 dev 和 CI/生产场景插件)、alias 指向、turbo 与 vite 的协作模式。
- 修改后在 Vercel 手动多次验证内存峰值和实际用时。
参考分析详情
- fix: prevent Vercel OOM by limiting turbo concurrency and increasing Node heap #974
- Vercel limits 2026
如需具体配置代码示例,可在此 issue 下补充讨论。
Reactions are currently unavailable
Metadata
Metadata
Labels
bugSomething isn't workingSomething isn't working