改个页眉要打开七八个仓库复制粘贴
在 2026 年 7 月中旬之前,虽然我们的各个子站都已经陆续换上了现代化的技术栈,但代码仓库的管理方式依然停留在“散装时代”:账户系统是一个仓库,论坛是一个仓库,主站、MC 站、Wiki 站、变迁馆又各自躺在不同的文件夹里。
这种散装结构在站点少的时候还能凑合,等站点涨到七八个之后,日常维护简直成了噩梦:
- 数据库里加一个新字段,我得把
schema.prisma复制粘贴到三四个不同的项目里,分别跑一次prisma generate,稍不留神某个站就因为模型版本不一致报错; - 想改一下深色模式的配色变量,或者微调一下顶部导航按钮的圆角,得挨个打开每个项目的目录改一遍、提交一遍、打包一遍。
我受够了这种把时间全浪费在机械同步上的苦日子,决定把所有家当全部搬进同一个屋檐下。
Commit df36000:十站归仓与四大公共包
2026 年 7 月 16 日(Git 历史里的起点提交 df36000),我正式创建了 igng-dev/igng-sites 单体仓库(Monorepo),采用 pnpm workspace + Turborepo 管理所有工程,并统一升级到 Next.js 16.2.1。
在这一天的大合流里,有十个应用被一次性收进了 apps/ 目录下:
igng(主站)、mc(服务器站)、bbs(社区论坛)、bbs-dashboard(论坛管理台)、account(账户中心)、sso(单点登录认证中心)、wiki(文档库)、hist(历史变迁馆)、igngchat(即时聊天试验场)以及 agent(智能体工作台)。
更重要的是,我把以前到处抄来抄去的代码彻底抽离成了 packages/ 目录下的四个标准共享包:
@igng/database:全仓唯一的 Prisma 5.22.0 单例客户端与schema.prisma真源,改一处全站生效;@igng/ui:放AnimatedBlock、ThemeToggle等所有站点共用的交互组件;@igng/theme:统一管理全局globals.css主题变量与防闪烁的ThemeScript.js;@igng/analytics:一行代码接入的 Umami 统计组件。
从这一天起,“散装维护”彻底成为历史。后来无论是做全站安全审计、统一页眉还是跨站权限打通,全都是建立在这个 Monorepo 地基之上的。