一套代码,多个 App:UniFusion 如何实现 uni-app 多业务组合交付

2 阅读3分钟

前言

做 uni-app 开发时,你是否遇到过这些痛点?

  • 客户 A 要功能模块 A+B,客户 B 只要模块 A —— 代码怎么复用?
  • 同一个业务,既要独立交付 App,又要进综合平台 —— 如何避免维护两套代码?
  • 每次打包都要手动改 pages.jsonmanifest.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 工具
  • 项目脚手架
  • 配置可视化

开源地址


总结

UniFusion 本质是一个 uni-app 多应用构建系统,而不仅仅是模板。

它解决的问题很简单:

如何用一套代码,同时交付多个不同的 App?

如果你也有类似的需求,欢迎试用和交流!


如果对你有帮助,欢迎 Star!有问题也欢迎在评论区交流 👇