主子应用理念

V8采用主子应用的构架,除开login外,所有应用必须运行于主应用下。

对于终端用户来说,整个V8只有一个入口,即主应用。所有的子应用都以页签或独立页面的形式的运行在主应用之下。

主应用统一处理:

  1. 基础组件
  2. 高频业务组件
  3. 公共资源
  4. 国际化
  5. 路由
  6. 页签
  7. 事件分发
  8. 用户信息
  9. 系统变量
  10. 身份认证
  11. 权限处理
  12. 按需加载子应用

子应用仅关心自己的业务逻辑即可

主子应用技术架构

主子应用通过V8统一的脚手架syf进行生成及构建,保证了规范一致

主应用负责加载各种基础资源,如vendor、业务组件external出来的资源等

子应用采用webpack5的Module Federation能力接入主应用,理论上,子应用支持react、vue、传统html+js+css等多种技术栈,使用webpack5打包后,暴露出remoteEntry.js 供主应用按需加载。

开发时,子应用可独立运行,自行加载各种公共资源,保证开发效率;但在上线后仅可运行在主应用之下

主应用核心功能

加载公共资源

react、react-router、UI组件、高频业务组件、业务组件external出来的资源、主题风格、图标库、公共国际化词条等

  1. @seeyon/ui (加载方式: iife)
  2. @seeyon/mui (加载方式: iife)
  3. @seeyon/global (加载方式: iife)
  4. @seeyon/biz-bpm-run(加载方式: mf)
  5. @seeyon/mbiz-bpm-run(加载方式: mf)

按需加载子应用

子应用通过暴露入口给主应用,主应用根据路由地址按需加载子应用的资源 路由:统一管理路由

举例:https://test.seeyonv8.com/main/portal/app1/module1/abc 其中 https://test.seeyonv8.com为当前域名,/main为主应用的标识,/portal表示当前处理主应用的门户多页签模式下,如果是独立页签,这里一般为/child-frame,/app1为当前访问的子应用名称,/module1/abc为子应用自身的路由。

主应用根据规则拿上到上述内容后,会按需加载app1的remoteEntry.js,然后渲染app的/module1/abc。

统一处理身份认证、权限

页签管理 根据配置处理子应用的打开方式是在页签下处理还是独立渲染

主应用构建流程

子应用运行方式

嵌入主应用中以页签方式展示

如:http://test.seeyonv8.com/main/portal/app1

图中“任务管理”“HR管理”两个子应用均以页签形式展示在主应用下,支持主子应用通讯、子子应用通讯

独立页面

如:http://test.seeyonv8.com/main/child-frame/app1

此种情况下,应用拥有整个window,按自身需要独立渲染; 也同时拥有主应用的各种统一处理能力,如资源、路由、事件等。

图中该子应用以独立挂载于主应用下的形式而存在,支持主子应用通讯

子应用接入主应用

● 本地: 开发者调整 webpack-overrides.js 中 main 的代理地址 ● 线上: 无需关心,相关逻辑已处理好

编撰人:huhao

快速跳转