$ man context-wiki/monorepos

基础设施intermediate

Monorepo

一个仓库、多个项目、共享代码、一次推送全部部署


为什么用 Monorepo

我本来计划做一个网站。后来代理和我一起梳理了架构,发现一个站点放不下所有内容。三个受众,三个域名。shawnos.ai 用于我的个人品牌。thegtmos.ai 面向 GTM 工程师。thecontentos.ai 面向内容创作者。但我不想要三个独立仓库,带着三套依赖、三条部署流水线、三份相同的设计系统。所以我们构建了一个 Monorepo。一个仓库容纳三个站点,它们之间共享代码。一次推送部署全部三个。一套设计系统。一个真相来源。
模式

架构是怎么工作的

Turborepo 负责编排管理。它知道哪些项目依赖哪些包,并按正确的顺序构建。 apps/shawnos/ 是 shawnos.ai 站点。 apps/gtmos/ 是 thegtmos.ai 站点。 apps/contentos/ 是 thecontentos.ai 站点。 packages/shared/ 存放三个站点共用的组件、样式、数据文件和工具函数。 当我更新一个共享组件时,三个站点都会获得更新。当我添加新数据文件(比如这个维基)时,我把它放在 packages/shared/data/ 里,任何站点都可以导入。共享包是桥梁。站点从中导入,永远不复制代码。
专业技巧

相比独立仓库的优势

一次提交可以更新三个站点。如果我修复了共享导航组件中的一个 bug,三个站点在一次推送中都得到修复。无需跨仓库同步。 共享类型和数据。维基数据文件、RPG 进度系统、语音组件,全部放在 packages/shared/ 里。写一次,到处使用。 一致的依赖。三个站点使用相同版本的 Next.js、React 和所有其他包。仓库之间不会出现版本漂移。 一条部署流水线。推送到 main,Vercel 构建全部三个,全部上线。/deploy 技能管理一个仓库,而不是三个。
反模式

Monorepo 的代价

Monorepo 不是免费的。构建时间更长,因为 Turborepo 要构建多个项目。初始设置比单站点仓库更复杂。包导入需要正确配置(package.json 中的 exports、TypeScript 路径解析)。而且如果你搞坏了共享包,三个站点同时挂掉。 如果项目之间有共享代码,这个权衡是值得的。如果你的项目真的完全独立、没有共享组件或数据,独立仓库更简单。我的三个站点共享设计系统、数据文件、组件和工具函数。Monorepo 每周为我节省数小时。如果它们什么都不共享,我会用三个仓库。

knowledge guide
See "Context" in Knowledge See "Vercel" in Knowledge See "Monorepo" in Knowledge

相关条目
部署与 VercelGitHub 仓库面向 GTM 工程师的 Git分类法
上下文 Wiki知识库指南
ShawnOS.ai|theGTMOS.ai|theContentOS.ai
built with Next.js · Tailwind · Claude · Remotion