微前端框架
目前相对知名的微前端框架有 single-spa,icestark,qiankun。本文主要记录基于 qiankun 跑一个基本的微前端 demo。
qiankun 框架
qiankun 是一个基于 single-spa 的微前端实现库,旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统。
qiankun 的核心设计理念:简单、 解耦/技术栈无关。因此给我们广大前端开发者提供了开箱即用对便利。
实现:
构建主应用基座
本次实践以 react 为基座,首先创建一个 react 应用,
1 | npx create-react-app my-app |
然后安装 qiankun: yarn add qiankun # 或者 npm i qiankun -S
注册、启动微应用
在入口文件中注册微应用:
1 | import { registerMicroApps, start } from "qiankun"; |
当微应用信息注册完之后,一旦浏览器的 url 发生变化,便会自动触发 qiankun 的匹配逻辑,所有 activeRule 规则匹配上的微应用就会被插入到指定的 container 中,同时依次调用微应用暴露出的生命周期钩子。
接入微应用
微应用不需要安装 qiankun,只需要在入口文件导出相应的生命周期钩子,在入口 js (通常就是你配置的 webpack 的 entry js) 导出 bootstrap、mount、unmount 三个生命周期钩子,以供主应用在适当的时机调用。另外,由于主应用 fetch 微应用资源,可以是不同端口甚至不同域名,属于跨域行为,所以需要在微应用中配置允许跨域。
react 微应用项目接入
1 | // 入口文件index.js |
注意:通过 create-react-app 工具构建的项目,需要安装依赖重写配置
重写 react 配置:
- 安装依赖:
yarn add react-app-rewired -D
- 重新配置项目启动脚本,在 package.json 文件中修改如下
1 | { |
- 项目根目录下创建配置文件 config-overrides.js,其内容如下:
1 | const path = require("path"); |
vue 微应用项目接入
安装:npm install -g @vue/cli
OR yarn global add @vue/cli
创建一个项目:vue create my-project
1 | // 入口文件main.js |
覆盖 vue 默认配置,新建 vue.config.js 文件:
1 | const path = require("path"); |
至此,能跑起来最简单的微前端环境了。
问题记录
主应用注册微应用的 name 必须和微应用 output.library 的名字一致并且所有微应用名称应该唯一,否则会报错:Application died in status LOADING_SOURCE_CODE
微应用的静态资源必须支持跨域,如果报错:
Access to fetch at ‘http://localhost:3002/' from origin ‘http://localhost:3001' has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
请在微应用中配置跨域允许