得物前端monorepo技术架构与实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
相关话题: #得物
1.
2. 得物前端monorepo技术架构与实践
3. 远俊
4. 01 背景:散乱且低效的代码复 02 基 03 架构: 04 迁移:平滑式的迭代与迁移并存 05 收益: : 统多端的分 模型 仓研发流程的设计 仓带来的成效
5. 什么是monorepo? • 将多个项 的源代码、依赖和构建配置等都放在 • 仓库中的 项 个仓库中管理 可以相关,也可以完全独 APP APP1 APP2 APP1 Gitlab APP2 APP3 APP3 APP4 APP4 monorepo polyrepo
6. 背景:散乱且低效的代码复
7. 得物前端架构的现状 业务发展快:团队规模从10+到100+,应 代码复 难:不同业务域中应 基础能 升级难:通 致,轮岗上 格不 致,出现问题定位难 成本 构建脚本不 协作效率低下:不同团队代码 重复功能模块代码重复多,难复 的npm组件包依赖,升级进度很难把控 构建问题定位难:不同应 数量从10+到150+ 快&难
8. 仓monorepo技术调研
9. 基 : 统多端的分 模型 • 如何管理不同端及不同业务的代码 • 如何实现 仓代码的按需拉取 件
10. 如何管理不同端及不同业务的代码 件 • .deps:不同端的依赖,B端、C端和Node服务 • ah5/anode/apps:不同端的 录,存放不同业务域应 • business:具体的业务域,如商家、客服 • _share:当前业务域下通 • crm:具体应 • packages: 录 仓顶层通 组件和功能依赖,包括组件、utils • shell:不同端的构建脚本 的基础能 件 ,包括组件、utils
11. 如何实现 仓代码的按需拉取 git sparse checkout:稀疏检出,根据检出 件配置下载所需要的 sparse-checkout拉取代码步骤 sparse-checkout配置 件 件 最终拉取的应 录
12. 如何实现 简化执 仓代码的按需拉取 步骤:命令 命令 具CLI + VSCode插件 具CLI VSCode插件
13. 架构: 仓研发流程的设计 • 权限管理 • 统 的研发流程 • 单元测试 • 主 研发流程
14. 权限管理 - 存在的问题 录下的代码 提交了怎么办 代码,提交了怎么办
15. 权限管理 - 解决 案 基本权限约束 • 权限 • 分 • 流程约束 • Git hook校验 保护 件Owner
16. 权限管理 - 基本权限约束 保护分 Owner:代码仓库的所有者, 般 为TL 般 Maintainer:代码仓库的维护者, Developer:代码仓库的开发者, 般 master 为TL/PM 为研发 员 release-* 研发本地 hot x-* 没法直接提交
17. 权限管理 - 基本权限约束 件 录权限卡点
18. 权限管理 - 流程约束 函数会对
19. 研发流程 - 存在的问题 • 每个迭代都有上百个开发分 • 研发 员技术能 参差不 • 每个业务域的迭代节奏不 ,如何让新建的分 不冲突 ,如何减少上 成本和保证研发体验 致,是 仓维度还是应 • 快速的迭代过程中,如何保证不同应 维度的部署发布 的代码CR之间互不影响
20. 研发流程 - 解决 命名规范 分 案 辅助的 命令 具CLI 统 的构建脚本 严谨的 MR/CR流程
21. 研发流程 - 分 命名规范 • Dev分 命名规范:feature-[应 • 测试分 命名规范:test-[应 • 发布分 命名规范:release-[应 • 热修复分 标识]-版本号- 标识]-版本号 标识]-版本号 命名规范:hot x-[应 标识]-版本号 应 定义 标识是唯 的
22. 研发流程 - 辅助的命令 命令 具 dx 安装应 install add 具 update remove 的依赖 start 安装三 pnpm install vue -w -S pnpm install -- lter @monorepo-app/kefu-monitor-migrate... pnpm install vue -S 简化流程、减少理解成本、提升研发效率 的依赖 pnpm install -- lter @monorepo-app/frontend-monorepo dx install -s build dx install vue -S …
23. 研发流程 - 统 turbo.json package.json
24. 研发流程 - 统 的构建脚本 • 统 构建参数:sh cloud-build.sh -d customer/kefu-xxx-kbench -e t1 • 统 解压路径:./apps/customer/kefu-xxx-kbench/dist 按应 维度的发布,各业务应 发布互不影响
25. 研发流程 - 严谨的MR/CR流程 件owner确认,避免错改其他业务域代码带来的 在CR阶段通过 险
26. 研发流程 - 单元测试 • 组件源码依赖之后,如何确保组件的发布质量 • 研发迭代开发需求已经很忙了,还有时间写单元测试吗 • 研发发布流程中,如何集成 动化单测卡点
27. 研发流程 - 单元测试 覆盖率和分 覆盖率
28. 研发流程 - 单元测试AIGC辅助 结构、代码进 融合
29. 研发流程 - 单元测试流程卡点 Gitlab webhook Push event CICD构建检测 流 线任务卡点配置
30. 研发流程 - 主 研发流程 频繁集成、持续集成 减少分 管理的复杂性 master作为发布分 release master 转变 master release
31. 研发流程 - 主 研发 • 对研发的 临的问题 平要求 较 ,如何让所有研发适应流程 如何缓解 定会在当前的release分 • 集成到master代码不 致,如何做好双端之间的协同 • 前后端的发布节奏不 • 频繁集成、持续集成给服务带来的压 发布
32. 研发流程 - 主 研发流程 集成到master代码不 定会在当前的release分 功能开关:能够动态的控制线上功能是否即时 If…else… 前端配置平台 发布 效 单元测试
33. 研发流程 - 主 研发流程
34. 迁移:平滑式的迭代与迁移并存
35. 平滑式的迭代与迁移 - 现状 • 迭代和迁移同时进 迁移之后,如何确保应 • 应 的时候,如何做到快速迁移 的功能在 产环境不出问题
36. 平滑式的迭代与迁移 - 档与 具提效 平台配置修改:迁移 配置修改:命令 应 档 + 具dx 修改
37. 平滑式的迭代与迁移 - 灰度环境验证 研发 测 -> 功能灰度 -> 同步测试 -> 发布上线
38. 收益: 仓带来的成效
39. 仓带来的成效 200M左右 效益 • 统 了lint规范,减少上 • 统 了研发流程,提升协作效率 • 更好的代码复 成本 ,提升编码效率
40. 遇到的难点与挑战 • 幽灵依赖的问题 • 全局lock还是局部lock 动回合master给服务带来的压 • • CR过程中如何避免 本次变更带来的 扰 • 组件中peerDependencies依赖带来的多实例问题 • Git元数据不断增加带来的git命令执 • … 效率问题
41. 内容回顾 背景:得物前端平台的架构现状以及前期的技术调研 基 : 架构: 仓的分 模型以及代码按需拉取的实现 仓的权限管理、研发流程、单元测试和主 迁移:平滑迁移的流程与线上质量的保证 前迁移的 仓数据现状以及带来的收益 收益: 研发的设计
42. 关于我们 稀 掘 : https://juejin.cn/user/2392954206960247 InfoQ: https://www.infoq.cn/u/dewu-tech/publish
43. 感 谢

ホーム - Wiki
Copyright © 2011-2025 iteam. Current version is 2.142.0. UTC+08:00, 2025-02-23 10:26
浙ICP备14020137号-1 $お客様$