得物前端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. 感 谢