基于qiankun的前端可组装应用开发实践

简介: 模块化可组装是云巧组件的核心理念之一。本文以某门户后台管理系统的前端为例(由N个模块组装而成),介绍一种前端模块化、可组装的开发实践。

模块化可组装是云巧组件的核心理念之一。接下来以某门户后台管理系统的前端为例(由N个模块组装而成),介绍一种前端模块化、可组装的开发实践。

实现的效果:

  1. 模块A(独立的后端服务、数据自包含、业务逻辑独立完整)前端独立运行:

(应用完整,包含所有功能)

  1. 模块A集成在某门户后台管理系统中:

(仅集成内容区,导航、路由由主应用控制)

三个关键点:

  1. 页面如何同时满足独立部署及以区块方式被集成?
  2. 跨应用如何统一账号信息?
  3. 如何实现布局等控件的自动适应?

具体实现:

  1. 利用微前端框架qiankun实现页面的跨应用集成。
  1. 子应用中:在 umi 框架内基于@umijs/plugin-qiankun插件可一键开启微前端模式,并可自动适应作为子应用集成/独立部署两种情况。(其他脚手架可参考:qiankun-快速上手
import { defineConfig } from'@ali-dayu/koi';
exportdefaultdefineConfig({
// ...qiankun: {
// 作为子应用slave: {},
  },
// ...});

b. 主应用中:(以下以 umi3 框架配置为例,其他脚手架可参考:qiankun-快速上手

首先,在配置文件中开启微前端模式。

import { defineConfig } from'@ali-dayu/koi';
exportdefaultdefineConfig({
// ...qiankun: {
// 作为主应用master: {},
  },
// ...});

然后,在app.ts运行时配置微应用和加载地址。

exportconstqiankun= {
apps: [
    {
name: 'app1',
entry: 'https://xxx.xxx.xxx',
    },
    {
name: 'app2',
entry: 'https://xxx.xxx.xxx',
    },
  ],
};

最后,在需要加载该模块子应用的位置提供容器,配置加载子应用。

importReactfrom'react';
import { MicroAppWithMemoHistory, useLocation, history } from'umi';
import { PageHeader } from'@/layout/components/PageHeader';
exportdefault () => {
const { query } =useLocation() asany;
return (
<divclassName={styles.settings}><PageHeadertitle={`${query?.name}`}/><MicroAppWithMemoHistoryname="app1"url="/xxx"autoSetLoading/></div>  );
};


  1. 基于统一的单点登录认证体系实现跨应用免登与账号信息同步。(以下以 umi3 框架配置为例,其他脚手架可参考相关文档)

后端使用统一的登录鉴权SDK,基于分布式session或统一网关实现跨后端应用的单点登录、统一鉴权。而前端仅需要封装请求库,增加一个拦截器逻辑,识别到需要重新登录的code时跳转单点登录页面,所有请求使用该请求库即可。

importumiRequestfrom'umi-request';
umiRequest.interceptors.response.use(async (response, options) => {
constdata=awaitresponse.clone().json();
const { code, extInfo } =data;
// 未登录/过期,需要重新登录if (code==='ConsoleNeedLogin') {
// 单点登录逻辑// ....  }
returnresponse;
});
export { umiRequestasdefault };
export*from'umi-request';


  1. 通过构建时环境变量、运行时window变量等配置控制布局的自动适应。
  1. 注入构建时环境变量
// 读取编译时环境变量并注入// 以 umi 脚手架为例,其他构建脚手架参考相关文档const { XXX_NEED_LAYOUT } =process.env;
exportdefaultdefineConfig({
// ...define: {
XXX_NEED_LAYOUT,
  },
// ...}


b. 解析变量,优先级策略是,显式配置 > 根据环境自动判断,运行时配置 > 构建时配置

exportconstxxxNeedLayout: boolean= (() => {
if (window.XXX_NEED_LAYOUT!==undefined) {
// 运行时window变量,优先级最高returnwindow.XXX_NEED_LAYOUT;
  } elseif (XXX_NEED_LAYOUT!==undefined) {
// 编译时注入的环境变量,优先级次之returnXXX_NEED_LAYOUT==='true';
  } else {
// 无显式指定是否需要布局,判断当前应用是否为qiankun子应用来决定是否隐藏布局return!window.__POWERED_BY_QIANKUN__;
  }
})();

c. 在模块A的布局实现中读取配置,并根据此变量实现布局的自适应。

// ...import { needLayout } from'@/utils/runtimeEnvVars';
// ...constPage: React.FC<any>= (props: any) => {
return (
<LayoutclassName={styles.layouts}>      {needLayout&& (
<Sider><Menu// .../></Sider>    )}
<Content>{children}</Content></Layout>  );
};


相关文章
|
前端开发 开发工具 容器
基于qiankun的前端可组装应用开发实践
模块化可组装是云巧组件的核心理念之一。本文以某门户后台管理系统的前端为例(由N个模块组装而成),介绍一种前端模块化、可组装的开发实践。
|
监控 JavaScript 前端开发
Qiankun框架对于微前端的解耦和沙盒与实战探索心得
Qiankun框架对于微前端的解耦和沙盒与实战探索心得
Qiankun框架对于微前端的解耦和沙盒与实战探索心得
|
JavaScript 前端开发 Go
微前端之qiankun 介绍和简单使用
微前端之qiankun 介绍和简单使用
6179 0
|
设计模式 资源调度 Kubernetes
微前端应用 乾坤 开发实践
乾坤作为一款微前端应用框架,可以有效的实现前端应用程序的模块化设计,代码复用和可维护性。下面我们来通过实际开发来看看乾坤的使用方式以及实践。
|
前端开发 JavaScript API
前端工程化中重要概念之打包工具
在前端开发中,打包工具是必不可少的工具之一。它可以帮助我们将多个JavaScript、CSS或其他资源文件打包成一个或多个文件,从而减少网络请求次数,提高网站性能。同时,打包工具还可以进行代码压缩、转换、处理依赖等操作,使得前端开发更加高效和规范化。下面介绍一些在前端工程化中常用的打包工具及其作用:
386 0
|
Java 测试技术 Maven
Android组件化开发实践(三):组件开发规范
不以规矩,不成方圆。特别是多人协作开发时,如果没有统一的开发规范,势必会造成各种混乱。在实际开发中,常常会碰到的问题有: 引入的某个第三方库版本冲突; 不同组件里同名资源文件被覆盖; APP壳工程打包时AndroidManifest.xml合并发生错误; 往往单独的组件工程运行良好,但是集成到壳工程时就是不行,所以我们必须要严格遵守规范,尽可能减少这种问题的出现。
3294 0
|
缓存 前端开发 JavaScript
【微前端】qiankun 到底是个什么鬼
在上一篇文章【微前端】single-spa 到底是个什么鬼 聊到了 single-spa 这个框架仅仅实现了子应用的生命周期的调度以及 url 变化的监听。微前端的一个特点都没有实现,严格来说算不上微前端框架。 今天就来聊一个真正的微前端框架:qiankun。同样地,本文不会教大家怎么实现一个 Demo,因为官方的 Github 已经有一个很好的 Demo 了,如果你觉得官网的 Demo 太复杂了,也可以看我自己实现的小 Demo。
【微前端】qiankun 到底是个什么鬼
|
Android开发
Android组件化开发实践(一):为什么要进行组件化开发?
1. 前言 三国演义里开篇就说:天下大势,分久必合,合久必分。我发现这话套在软件开发上,也特别贴切。我记得我刚入门时做java后台开发,以及后来做Android应用程序开发,刚开始都是采用中心化管理的思想,将相同的资源集中进行管理,但是做着做着,发现集中管理的资源太多了,多人开发时牵一发而动全身,进而又要对原本的项目进行拆分,演变出什么SOA架构、什么微服务,以及我这里要讲的Android组件化实践。
1210 0
|
JavaScript 前端开发 中间件
前端网红框架的插件机制全梳理(axios、koa、redux、vuex)
前端中的库很多,开发这些库的作者会尽可能的覆盖到大家在业务中千奇百怪的需求,但是总有无法预料到的,所以优秀的库就需要提供一种机制,让开发者可以干预插件中间的一些环节,从而完成自己的一些需求。
|
前端开发
前端:组件化开发和模块化开发的区别到底在哪???
前端:组件化开发和模块化开发的区别到底在哪???
1301 0
前端:组件化开发和模块化开发的区别到底在哪???

热门文章

最新文章