微前端-乾坤qiankun

2019-2020年前端最火的技术之一:微前端

微前端究竟是什么?

前端是近三年前端社区比较火的技术方案,试图把拆分大型后端系统的一些益处引入前端

微前端就是将不同的功能按照不同的维度拆分成多个子应用。通过主应用来加载这些子应用。

微前端的核心在于, 完后再!

微前端,即前端微服务。是将前端应用分解成一些更小、更简单的能够独立开发、测试、部署的小块,而在用户看来仍然是内聚的单个产品

前端主要解决的问题:

1)毫无相关的业务,独立部署,降低运维成本。 (独立业务拆离)

2)团队人员逐渐增多,产品功能复杂,代码冲突频繁、影响面大,需独立部署。 (独立模块拆离)

3)在业务中,运行比较稳定,运维不频繁的项目部分,需独立部署。 (稳定业务拆离)

4)架构比较老但运行比较稳定的项目部分,近期不计划重构的,需独立部署。(独立架构拆离)

前端特点: 独立开发、独立部署、独立运行、增量升级(单个服务升级)。

微前端方案正确的架构姿势应用之间不应该有任何直接或间接的技术栈、依赖、以及实现上的耦合。

Single-spa前端方案结合了MPASPA的优势,可以在单个页面内集成多个应用。

技术栈无关

独立部署每一个单页面应用

新功能使用新框架,旧的单页应用不用重写可以共存

改善初始加载时间,延迟加载代码

 qiankun示例

微前端拆离工具:qiankun

主应用配置:

1.安装乾坤

$ yarn add qiankun # 或者 npm i qiankun –S

2.注册微服务

I.自动注册

// 在主应用中注册子应用

II.手动注册

import { loadMicroApp } from 'qiankun';

 name跟container需要名称不一致。

3.应用访问

I.跨域

devServer: {
headers: {//
重点1: 允许跨域访问子应用页面
  ‘Access-Control-Allow-Origin’: ‘http://localhost:7100’,//设置多域名,逗号隔开
},

子应用配置:

I.main.js配置

 

II.路由配置

import '../../public-path'    // 重点3: 引入public-path文件

router里面添加

 

主子应用传参:

主应用:

import { initGlobalState } from "qiankun

const actions = initGlobalState(state);
actions.onGlobalStateChange((state, prev) => {
  // state:
变更后的状态; prev 变更前的状态
 
console.log(state, prev);
});

actions.setGlobalState(state);
actions.offGlobalStateChange();

子应用:

export function mount(props) {

props.onGlobalStateChange((state, prev) => {

// state: 变更后的状态; prev 变更前的状态

console.log(state, prev);

});

props.setGlobalState(state);

}

 

 

### 微前端 Qiankun 使用常见问题及解决方法 #### 子应用中的资源加载问题 当子应用作为独立应用程序运行时一切正常,但在被父应用加载时出现问题。例如,在使用 `iconfont` 图标的场景下,如果子应用在独立环境中能够正确展示图标,而通过 qiankun 加载到主应用中却无法显示,则可能是由于相对路径配置不当造成的。为了确保公共资源能被正确访问,建议采用绝对路径来引入这些资源文件[^2]。 对于上述情况的一个具体解决方案是在构建工具(如 Webpack)配置中设置公共路径 (`publicPath`) 为相对于根目录的 URL 或者使用 CDN 链接直接引用外部资源。这样无论是在开发环境还是生产环境下都能保证静态资源的有效加载。 ```javascript // webpack.config.js 中的部分配置项 module.exports = { output: { publicPath: '/', // 设置为'/'表示所有资源都从根路径开始计算 }, }; ``` #### 跨域资源共享 (CORS) 另一个常见的问题是跨域请求失败。这通常发生在微服务架构下的不同域名之间互相调用 API 接口时。要解决这个问题,可以在服务器端开启 CORS 支持,允许来自特定源站的 HTTP 请求;也可以考虑部署反向代理服务器统一处理前后端之间的通信。 #### 生命周期钩子函数执行顺序混乱 有时开发者会发现某些预期的行为并没有按照设想那样发生,尤其是在涉及到多个子应用间的交互逻辑时。这是因为各个模块间可能存在依赖关系,但默认情况下它们会被并行初始化。为了避免这种情况的发生,应该合理利用 qiankun 提供的应用生命周期事件来进行必要的同步控制[^1]。 - `beforeLoad`: 在加载任何远程入口之前触发; - `mounted`: 当组件挂载完成之后立即调用; - `bootstrap`: 应用启动阶段最先被执行的方法之一; - `unmount`: 卸载当前实例前调用此回调清理工作。 了解以上几个重要时刻点有助于更好地管理各部分代码片段以及优化用户体验流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值