基于React Native的白标移动应用模块化架构及单仓方案咨询
白标移动应用模块化降本+Monorepo落地方案
一、先做功能模块拆分:按「通用程度」分层
别上来就搞Monorepo,先把代码拆成可复用的模块是基础:
- 核心基础模块:把所有应用100%共用的底层逻辑抽出来——比如网络请求封装、本地存储工具、通用UI组件(按钮、输入框这类无业务属性的),这部分代码绝不做任何定制化,所有应用直接依赖。
- 业务通用模块:针对那些70%相似的功能(比如用户登录、支付流程),把差异部分做成可配置项。比如支付模块,把支持的支付渠道、跳转地址、文案都写到配置里,不同应用用不同配置,核心逻辑完全复用。
- 业务定制模块:每个应用独有的功能(比如A应用的专属积分商城)单独拆成独立模块,只在对应应用中引入,不影响其他应用。
所有可变逻辑都通过配置驱动实现:每个白标应用维护自己的app.config.ts(或json),里面包含主题色、Logo地址、功能开关、业务参数(比如客服电话、第三方SDK密钥),核心模块通过统一的配置管理类读取这些参数,绝不硬编码判断。
二、Monorepo仓库结构与落地
直接给可复制的仓库结构,用pnpm/Yarn Workspaces做依赖管理:
white-label-apps/ ├── packages/ │ ├── core/ # 核心基础模块 │ ├── ui-components/ # 通用UI组件库 │ ├── user-auth/ # 业务通用模块(登录/注册) │ ├── payment-service/ # 业务通用模块(支付) │ ├── app-retail/ # 零售类白标应用(仅含配置+定制代码) │ ├── app-service/ # 服务类白标应用 │ └── retail-points/ # 仅零售应用用的定制模块(积分商城) ├── scripts/ # 通用脚本:批量构建、版本升级 └── assets/ # 共用资源:通用图标、基础样式模板
- 依赖管理:用pnpm的workspaces,每个模块的
package.json声明自己的依赖,比如app-retail依赖core、user-auth、payment-service和retail-points,安装时自动处理模块间的依赖关系。 - 构建发布:写统一的构建脚本,比如
npm run build -- --app app-retail,脚本会读取对应应用的配置,打包时只引入该应用依赖的模块,避免冗余代码。
三、分支协作:解决跨应用功能迁移难题
放弃之前的“一个应用一个分支”模式,改成按模块/功能分支:
main分支:所有模块的稳定版本,所有应用的正式发布都基于此分支。- 通用功能分支:比如要优化支付流程,从
main拉feature/payment-upgrade分支,只修改payment-service模块,合并后所有依赖该模块的应用都能同步更新。 - 定制功能分支:比如给零售应用加新功能,从
main拉feature/retail-new-function分支,只修改app-retail和retail-points,合并后不影响其他应用。 - 功能迁移:如果某个定制功能要推广到其他应用,直接把对应的定制模块(比如
retail-points)改成可配置模式,移到业务通用模块目录,其他应用只需在自己的配置中开启该功能即可。
四、维护效率提升的细节
- 模块化测试:每个模块单独写单元测试和集成测试,改通用模块时只跑对应模块的测试,不用全量测试所有应用,节省时间。
- 版本管控:给每个模块单独打版本号(比如
core@1.3.0),白标应用可以指定依赖的模块版本,避免强制升级导致的兼容问题。 - 差异追踪:写简单的脚本对比不同应用的配置文件,或者用Monorepo工具(比如pnpm的
pnpm ls)查看各应用的依赖差异,快速定位功能不同点。
内容的提问来源于stack exchange,提问作者trigger
相关产品推荐
相关产品推荐

