
Vercel 上的 Monorepo 部署优化:utities.online 案例研究
大型 Monorepo 项目——尤其是托管多个独立 Web 应用的项目——在 Vercel 上通常面临一个常见的部署低效问题:即使对单个子项目进行微小更改,也会触发整个仓库的完整重建和重新部署。这不仅浪费宝贵的构建资源,还会显著减慢部署时间,影响开发者的工作效率。
utities.online 项目是一个典型的使用 pnpm workspaces 管理的 Monorepo,在 utities.online 域名生态系统下托管多个独立的 Web 应用:
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
└── packages/
├── altitude/ ← 海拔测量工具
├── auto-trim-image/ ← 自动图像裁剪工具
├── image-compare-pro/ ← 图像比较工具
├── logo-dash/ ← Logo 生成工具
├── shared-ui/ ← 共享 UI 组件库
└── video-splitter/ ← 视频分割工具
每个应用部署到唯一的子域名(例如 altitude.utities.online、logo.utities.online),而主网站位于 www.utities.online。
子项目通过 pnpm 的工作区协议引用共享 UI 库:
json// 子项目的 package.json 示例 { "dependencies": { "shared-ui": "workspace:*" } }
所有子项目使用类似的 vercel.json 配置:
json{ "buildCommand": "pnpm generate", "outputDirectory": "dist/static", "installCommand": "pnpm install", "framework": "vite" }
Vercel 提供了一个强大的功能,可以在未检测到相关更改时跳过构建。对于像 utities.online 这样的多子域名项目,这是一个改变游戏规则的功能。
此设置指示 Vercel 智能分析代码更改。如果只修改了一个子项目,则只有该子项目会被重建并重新部署到其对应的子域名。
启用智能部署跳过后,utities.online 项目取得了显著改善:
utities.online 更新,提高生产力。对于像 utities.online 这样的大型 Monorepo,这个简单的配置更改改变了部署工作流程。它确保每个子域名独立且高效地更新,充分利用 Vercel 的基础设施。
关键要点:通过利用 Vercel 的内置智能功能,您可以优化 Monorepo 部署——节省时间、资源并减少开发者的挫败感。
您是否遇到过类似的 Monorepo 部署挑战?您是如何解决的?