主子应用理念
V8采用主子应用的构架,除开login外,所有应用必须运行于主应用下。
对于终端用户来说,整个V8只有一个入口,即主应用。所有的子应用都以页签或独立页面的形式的运行在主应用之下。
主应用统一处理:
- 基础组件
- 高频业务组件
- 公共资源
- 国际化
- 路由
- 页签
- 事件分发
- 用户信息
- 系统变量
- 身份认证
- 权限处理
- 按需加载子应用
子应用仅关心自己的业务逻辑即可
主子应用技术架构
主子应用通过V8统一的脚手架syf进行生成及构建,保证了规范一致
主应用负责加载各种基础资源,如vendor、业务组件external出来的资源等
子应用采用webpack5的Module Federation能力接入主应用,理论上,子应用支持react、vue、传统html+js+css等多种技术栈,使用webpack5打包后,暴露出remoteEntry.js 供主应用按需加载。
开发时,子应用可独立运行,自行加载各种公共资源,保证开发效率;但在上线后仅可运行在主应用之下
主应用核心功能
加载公共资源
react、react-router、UI组件、高频业务组件、业务组件external出来的资源、主题风格、图标库、公共国际化词条等
- @seeyon/ui (加载方式: iife)
- @seeyon/mui (加载方式: iife)
- @seeyon/global (加载方式: iife)
- @seeyon/biz-bpm-run(加载方式: mf)
- @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 的代理地址 ● 线上:无需关心,相关逻辑已处理好
快速跳转
