本文纯属调侃,后续会分享一些踩坑和无奈,注意:本文是通过 豆包 进行二次加工渲染!!
那一年,我们三个前端宛如桃园三结义,左手 git flow 修仙指南,右手 create-react-app 祖传配方,在老板画的饼上搭建了史诗级单体应用。每次 npm start 只要 30 秒,git merge 像在游乐场坐旋转木马般岁月静好——直到资本爸爸带着天使轮支票从天而降。
突然之间,团队像被打了激素的豆芽菜疯狂膨胀。新来的哥们个个身怀绝技:有人带着 Vue 的祖传秘方,有人揣着 Svelte 的玄学宝典,而我们那个曾经温顺的仓库,在 git commit -m "feat: 我也不知道改了什么反正能跑" 的狂轰滥炸下,终于长成了启动要喝三杯咖啡才能等完的祖传屎山。每次 npm run build 时风扇的咆哮声,像极了老板在晨会上喊「我们要做中国版ChatGPT」时的激情澎湃。 最刺激的还是 git 环节:合并分支堪比俄罗斯轮盘赌,冲突解决像在高考数学卷上默写《大悲咒》。直到某天 master 分支在众目睽睽下表演原地暴毙,我们才恍然大悟——原来过去几个月我们不是在写代码,而是在集体创作一幅名为《程序员的自我毁灭》的当代艺术地狱绘图。 最终,在甲方爸爸的鞭策下(以及某次凌晨n点跪着回滚代码的顿悟),我们举起了 DDD 的洛阳铲,把祖传屎山拆成了 微前端 的乐高积木。
那天老板突然拍着 MacBook 的苹果灯宣布:"我们要对外造火箭,对内拧螺丝!" —— 翻译成人话就是:设计小姐姐们连夜肝出 3.0 版视觉规范,而我们几个前端被迫化身人肉复制粘贴机,用 Ctrl+C/V 大法炼出了组件库 v1.0。美其名曰 "原子设计",实则每个按钮都带着我们凌晨三点的黑眼圈。重点来了,没有研发资源,npm 私源,不存在的!,于是只能被迫把一个个子模块变成 MonoRepo,将全量组件库都放在子模块的仓库中。组件库一更新,所有子模块手动更新。
起初我们天真地以为这是技术升级,直到发现每次改个按钮圆角都要在 8 个子模块里上演《复制忍者の修行》。老板看着禅道里暴涨的 "同步组件库" 任务,露出了资本家的慈祥微笑:"这说明我们的架构复用性很强嘛!"
最魔幻的是某次紧急发版:当第 7 次在厕所隔间里用手机 git push 组件热修复时,突然顿悟我们不是在搞前端工程化,而是在用 rm -rf 的勇气玩《大家来找茬》真人版。终于在某个月黑风高的夜晚,我们把组件库扔进独立仓库,用 submodule 玩起了量子纠缠 —— 现在每次更新组件都要在 20 个仓库间跳大神,还要在晨会上解释为什么 git submodule update 比老板的 "战略升级"PPT 更不可预测。
没多久,一个连投资人 PPT 都要裹上羽绒服的互联网寒冬来了,老板突然拍着桌子觉醒第二人格:"既然 DDD 教会我们拆家,那咱们就玩个乐高式创业!" —— 于是我们光荣晋升为代码裁缝,把之前拆出去的微前端像俄罗斯方块一样排列组合,硬生生把 ToB 系统改造成 "元宇宙相亲平台",美其名曰 "生态闭环"。
当产品经理第 18 次说出 "这次需求只要改个标题颜色" 时,我们终于明白:所谓的 "复用架构",就是让每个前端在 20 个仓库的 feat/老板的突发奇想-紧急-最终版-v2 分支之间表演空中飞人。某次 git log 里惊现 fix-typo-but-break-everything 的神提交后,CTO 终于含泪宣布:"是时候请出祖传屎山改造大法了!"
于是我们开启了量子力学级工程革命:
- 先造了个号称 "宇宙奇点" 的主壳子,塞满比老板画饼还抽象的
pnpm-workspace.yaml咒语阵,顺手把组件库用git submodule发射到平行宇宙; - 把子模块抽成代码骨架,成功实现 " 每个项目都能在
npm start时表演 404 魔术 " 的赛博朋克效果; - 开发时要在主壳子里玩《盗梦空间》,用
git submodule foreach 'git checkout 薛定谔的分支名'进行量子纠缠; - 发版时要像道士开坛作法,对着奇点不同的
/workflows/玄学发版.yml念动 CI/CD 咒语。
哦对了,每要新建一个项目,都要造一个 宇宙奇点 哦。这就像一场永无止境的造梦之旅,让人疲惫不堪。
终于,在这场漫长而艰辛的架构进化之旅中,我们现在的跨团队会议里,终于可以用「领域边界」「限界上下文」等专业黑话互相降维打击,仿佛在这场混乱的战斗中找到了一丝专业的尊严。然而,唯一没变的是,老板依然觉得「这个需求很简单」,这句话就像一个魔咒,不断地在我们耳边响起,提醒着我们前方的道路依然充满挑战。