前言
做 uni-app 开发时,你是否遇到过这些痛点?
- 客户 A 要功能模块 A+B,客户 B 只要模块 A —— 代码怎么复用?
- 同一个业务,既要独立交付 App,又要进综合平台 —— 如何避免维护两套代码?
- 每次打包都要手动改
pages.json和manifest.json—— 配置管理越来越混乱?
这些问题困扰了我很久,直到我写了一个叫 UniFusion 的工程模板。
UniFusion 是什么?
UniFusion 是一款基于 uni-app 的多业务、多应用工程模板。
它的核心能力是:
一套代码,同时支持单业务独立交付和多业务组合交付。
适用场景
- 多个客户基于同一套业务底座,但功能组合不同
- 一个团队长期维护多个相似应用
- 某个业务既要独立交付,也要进入综合平台
- 希望统一模块结构、配置方式和构建命令
核心架构
base -> profile -> composition -> modules -> generated config -> build
| 概念 | 说明 |
|---|---|
modules | 业务模块(每个模块可独立运行) |
profile | 综合应用公共外壳模板 |
composition | 综合应用组合方案 |
base | 公共基础模板 |
scripts | 配置生成 + 构建入口 |
两种交付模式
1. 单应用交付
每个模块可以单独运行、打包:
app-a → 独立 App
app-b → 独立 App
2. 综合应用交付
多个模块可以自由组合:
app-a + app-b → 综合平台 App
app-a + app-c → 另一个综合平台
快速开始
目录结构
src/
pages.base.json # 页面公共模板
manifest.base.json # 应用清单公共模板
profiles/
default.json # 综合应用外壳模板
compositions/
composite-app-a-app-b.json # 组合方案
modules/
app-a/
pages/
register.ts
app-b/
pages/
register.ts
定义一个模块
// src/modules/app-a/register.ts
export function appaModule() {
return {
name: "app-a",
standaloneApp: {
pagesConfig: {
globalStyle: {
navigationBarTitleText: "app-a"
}
},
manifest: {
name: "app-a",
appid: "__UNI__APP_A"
}
},
routes: [
{
path: "modules/app-a/pages/index",
page: {
style: {
navigationBarTitleText: "app-a 首页"
}
}
}
]
};
}
创建组合方案
// src/compositions/composite-app-a-app-b.json
{
"modules": ["app-a", "app-b"],
"profile": "default",
"pagesConfig": {},
"manifest": {}
}
运行命令
开发单应用:
npm run dev:mode -- app-a
打包单应用:
npm run build:mode -- app-a
开发综合应用:
npm run dev:mode -- @composite-app-a-app-b
打包综合应用:
npm run build:mode -- @composite-app-a-app-b
配置是如何生成的?
UniFusion 会自动合并多层配置:
pages.json 生成规则
单应用:
pages.base + module.standaloneApp.pagesConfig
综合应用:
pages.base + profile.pagesConfig + composition.pagesConfig
manifest.json 生成规则
单应用:
manifest.base + module.manifest + module.standaloneApp.manifest
综合应用:
manifest.base + module.manifest + profile.manifest + composition.manifest
这意味着:
- ✅ 公共配置只需写一次
- ✅ 每个模块可以覆盖或扩展配置
- ✅ 最终配置由脚本自动生成,无需手动维护
未来规划
UniFusion 的 scripts 目录计划单独抽成 npm 包,提供:
- CLI 工具
- 项目脚手架
- 配置可视化
开源地址
- Gitee:gitee.com/songtonngxu…
- GitHub:github.com/Squirtles33…
总结
UniFusion 本质是一个 uni-app 多应用构建系统,而不仅仅是模板。
它解决的问题很简单:
如何用一套代码,同时交付多个不同的 App?
如果你也有类似的需求,欢迎试用和交流!
如果对你有帮助,欢迎 Star!有问题也欢迎在评论区交流 👇