从零搭建一个qiankun微前端demo #97
zhangyu1818
announced in
zh-cn
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
了解微前端的起因是因为我公司的大多数页面都是手机h5,分散且基本毫无关联,每次新页面都开一个二级域名,很难管理,所以研究了微前端,虽然很久以前就听过,拖延让我直到有需要才去自己学习
本文初探
qiankun
,并且搭建一个可以跑的基础demo
,仓库地址前言
微前端是什么呢?按照
qiankun
文档中的一段摘录我的理解是,微前端可以将多个关联性不强,不同项目的子应用合体在一个项目里,并且与技术栈无关,在同一个页面可以同时显示
React
、Vue
、jQuery
的项目那么
qiankun
是什么呢?qiankun
是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统由于是国内开源的项目,文档也是中文,自然学习
qiankun
也是最友好的qiankun使用的两种方式
qiankun
后使用umijs
的plugin-qiankun
第一种方式,对主应用和子应用都没有要求,只要安装了
qiankun
并且照着文档配置好,就能跑通,但是需要配置的东西要多一点第二种方式,主应用需要为
umijs
的项目,子应用如果也为umijs
的项目,则配置非常简单,并且有额外的功能,比如跨应用的React hook
来共享数据所以,这两种方式,都探索一番
在普通项目中使用qiankun
普通项目并不需要是框架项目,仅仅一个
js
,一个html
都可以的主应用
主应用安装qiankun
在主应用的
html
里增加一个id为root
的div主应用的
js
文件中写上qiankun
的配置子应用
这里的子应用使用
create-react-app
的项目修改
webpack
配置由于要修改
webpack
的配置,在不eject
的情况下需要安装react-app-rewired
来修改配置修改
pageage.json
中的scripts
增加react-app-rewired配置文件
根目录增加
react-app-rewired
的配置文件config-overrides.js
修改挂载元素id
修改页面挂载元素
id
,因为主应用占用了root
这个id
public/index.html
修改子应用入口文件
src/index.jsx
增加
render
函数添加
qiankun
生命周期钩子访问主应用地址
localhost:8080
,是主应用,访问localhost:8080/app2
是create-react-app
的子应用,如果子应用有路由也可以直接访问,如localhost:8000/app2/page1
在umijs中使用qiankun
umijs
中,只需要主应用添加对应的插件plugin-qiankun
主应用
安装 plugin-qiankun
新增 document.ejs
新建
src/pages/document.ejs
,umi 约定如果这个文件存在,会作为默认模板这一步主要是需要增加一个额外的
div
元素来放置子应用,在plugin-qiankun
中默认子应用挂载在root-subapp
,如果没有这个元素会报错修改配置 .umirc.ts
子应用
umijs
子应用就非常简单了,只需要修改.umirc.ts
就行了全局共享数据
在普通
qiankun
和umijs
中又不相同了普通qiankun项目
普通
qiankun
可以通过initGlobalState
方法来定义主应用
子应用
umijs
的子应用钩子函数需要定义在src/app.js
由于方法和事件只在钩子函数里有,我觉得可以在
mount
的时候注册一个像event bus
这样的方法来供全局调用修改函数umijs的qiankun项目
plugin-umi
提供了一个比较方便的React hook
来全局调用主应用
约定主应用中在
src/rootExports.js
里export
内容子应用
需要注意的是,如果这里子应用单独运行或者是主应用的
qiankun
不基于umijs
,这个钩子会报错的,需要自己做好判断直接通过配置传递
子应用在生命周期钩子函数中的参数可以拿到
props
的内容在
qiankun
中这个配置是可以动态加载的,本文只探索了固定配置本文完整demo仓库地址
Beta Was this translation helpful? Give feedback.
All reactions