如何将生产代码迁移到单一代码库

如何将生产代码迁移到单一代码库

💡 原文英文,约2700词,阅读约需10分钟。
📝

内容提要

DigitalOcean的UI平台团队成功将130万行的React微前端代码迁移到了一个单一代码库,旨在简化依赖管理并提高开发者速度。他们按照预迁移、迁移和后迁移的三个阶段进行操作。自动化是关键,使用脚本确保可复现性。他们还改进了CI/CD工作流程并优化了单一代码库。迁移花费了一个季度的时间,结果提高了生产力并使扫描性更容易。挑战包括Yarn 4升级的沟通和CI/CD部署流程的问题。总体而言,单一代码库有助于加速他们的前端架构。

🔎

延伸解读

自动化脚本:迁移可复现的关键

团队将自动化作为指导原则,所有迁移步骤都通过脚本执行,确保从零开始可复现。他们使用zx编写脚本,在外部仓库运行,避免被强制推送覆盖。脚本初始化临时monorepo、克隆各仓库、移除冲突文件、移动文件到工作区、合并无关历史、复制模板并强制推送。经过数百次迭代,最终迁移时消除了人为错误。

Yarn 4升级:解决依赖冲突的里程碑

在Yarn 1中尝试解决应用间依赖冲突数天后,团队决定升级到Yarn 4,因其改进的工作区支持。通过设置nmHoistingLimits为workspaces,每个应用可包含冲突依赖并保持隔离。升级分为两个PR:显式添加未声明依赖和完成升级。团队还帮助成员解决本地Yarn版本位置问题,确保Node、Corepack和Yarn都在版本管理器内。

CI/CD优化:应对多应用仓库的挑战

迁移后,团队优化CI/CD工作流以支持单应用和多应用仓库。他们通过working-directory参数让共享动作在应用文件夹运行,提取部署工作流中的硬编码值,并构建检测变更工作区的动作,仅对变更工作区触发后续作业。还改用yarn workspaces focus安装依赖,设置作业门控减少并行负担,并添加run-name和max-parallel等改进。

迁移后的优化与经验教训

迁移后,团队安装dependency-cruiser防止应用间文件系统访问,强制使用标准包导入。将重复的包和设置移到根目录,抽象开发依赖到独立工作区。迁移花费一个季度,React相关功能PR增加1.6倍,内部库升级减少95%。挑战包括Yarn 4升级沟通不足和CI/CD生产部署流程问题,促使团队创建更强大的发布模板。

❓

Q&A

DigitalOcean的UI平台团队迁移代码的主要目标是什么?

主要目标是简化依赖管理并提高开发者速度。

迁移过程分为哪几个阶段?

迁移过程分为预迁移、迁移和后迁移三个阶段。

在迁移过程中遇到了哪些挑战?

主要挑战包括Yarn 4升级的沟通不足和CI/CD部署流程的问题。

迁移后,团队在CI/CD工作流程上做了哪些优化?

团队优化了CI/CD工作流程,支持单应用和多应用的仓库。

迁移完成后,团队的生产力有何变化?

迁移后,生产力提高,React相关功能的PR数量增加了1.6倍。

单一代码库的优势是什么?

单一代码库减少了共享代码之间的摩擦,同时保持了隔离带来的安全性。

🏷️

标签

➡️

继续阅读