其他框架接入微应用
为一些使用 icejs
、create-react-app
、umi 等三方框架的用户提供便利的接入指南。
#
icejs 应用有关 icejs 应用接入 icestark 的细节请参考 微前端 icestark。
#
create-react-app 应用改造步骤如下:
#
安装 icestark 依赖#
入口文件注册生命周期打开 src
目录下的入口文件 index.js
,注册子应用生命周期。
#
修改 webpack.config.js在使用 create-react-app
创建项目后,需要 eject 来支持自定义构建配置。执行命令:
执行完毕,项目会新增一个 config
目录,在 config
目录下找到 webpack.config.js
文件,新增配置:
#
示例 Repohttps://github.com/maoxiaoke/icestark-cra-child
#
nuxt.js 应用基于 nuxt.js 2.x
nuxt.js 可以通过 plugin 来注册微应用的生命周期。
#
新建 nuxt.js 自定义插件,并注册生命周期在 plugins
目录下新建 microapp.js
文件,注册生命周期
#
引入自定义插件在 nuxt.config.js
中引入插件,并关闭 ssr
。
tip
有关 nuxt.js 接入微应用的更多反馈和疑问,欢迎反馈至 icestark 接入nuxt.js
#
umi 应用基于 umi 3.x
改造步骤如下:
#
安装 icestark 依赖src
目录下添加 app.tsx
文件#
在 app.tsx
修改子应用渲染的节点,并注册子应用生命周期。
#
匹配页面路由经过上面的步骤,umi 子应用已能够正常加载。但需要正确渲染,还需要匹配当前渲染路由。比如,在子应用渲染在 https://localhost:3333/seller
路由下,则需要修改 umi 子应用 .umirc.ts
,通过 base
属性添加路由前缀。
#
示例 Repohttps://github.com/maoxiaoke/icestark-umi-child
#
next.js 应用基于 next.js 10.x
#
定义基准路由next.js 可以通过 basePath 来指定。
由于 next.js 无法运行时指定 basePath,因此建议提前对基准路由进行强约定。比如约定 http://localhost:3000/seller
下渲染上述配置的 next 微应用。则主应用的 path 配置需要与之一一对应:
entry 方式接入#
微应用通过#
其他- next.js 微应用本地开发访问跨域时的处理
可以通过 next.js custom server 来处理本地开发时访问跨域的问题。其中 server.js 的内容可参考:
tip
有关 next.js 微应用接入 icestark 的更多疑问或方案,可以在这个 issue下讨论
#
Angular 应用基于 Angular 12 (适用于 Angular 5 及以上版本)
#
定义基准路由修改 src/app/app-routing.module.ts
文件,使其在 icestark 中拥有正确的基准路由。
#
入口文件新增生命周期函数main.ts
是 Angular 应用的入口文件,我们在这里增加 icestark 渲染所需的生命周期函数。
#
自定义 webpack 配置,将应用打包成 UMD 规范要开启 Angular 自定义 webpack 能力,需要安装 @angular-builders/custom-webpack
:
建议安装与 Angular 版本对应的版本
接下来,修改配置文件 angular.json
,找到 build 和 serve 配置,修改成下面的内容:
并定义 custom-webpack.config.js
的内容:
#
给 Angular 加上一个唯一标识 id为防止 Angualr 与其他 Angular 应用冲突,建议给 <app-root>
加上一个唯一的 id,比如当前应用的名称:
在 src/app/app.component.ts
修改 Angular 挂载的节点:
#
使用 entry 或 entryContent 接入由于 Angular 默认渲染在 <app-root></app-root>
节点,因此建议通过 entry 或 entryContent 的方式接入。比如 Angular 应用部署在 http://localhost:3333
,则主应用配置建议配置如下:
#
示例 Repohttps://github.com/maoxiaoke/icestark-angular-12
#
Vite 应用icestark 在 v2.6.0 版本开始支持 ES modules 类型微应用的加载。由于目前 Vite 是目前最为流行的基于 ES modules 的构建工具,因此本章节介绍 Vite 应用接入 icestark 的具体步骤。
#
定义生命周期函数首先,在 Vite 应用的入口文件(Vue 应用通常是 main.t|js
,React 应用通常是 app.t|jsx
)定义生命周期函数,以 Vue 应用为例:
#
修改 Vite 配置文件Vite 应用默认使用根目录下的 index.html
作为入口文件,并通过解析 index.html
的 <script />
标签生成一个 “虚拟的” 脚本资源入口文件,会导致 icestark 无法获取导出的生命周期函数。
我们提供两种方式修改 Vite 配置文件,使得 icestark 可以正确获取生命周期函数。用户可以根据自己的实际情况进行选择。
- 使用 Vite Lib 模式
Vite Lib 模式可以完全指定入口文件。这种方式的缺点是 Vite 会只输出应用的样式和脚本文件,如果应用需要单独运行,还需要手动提供 index.html
文件。
配置如下:
- 使用 vite-plugin-index-html 插件
为了解决 Vite Lib 模式产生的问题,我们提供了 vite-plugin-index-html 插件,这个插件提供了类似 html-webpack-plugin 的能力。
在使用这个插件时,需要指定应用的入口文件(Vue 应用通常是 main.t|js
,React 应用通常是 app.t|jsx
))。使用如下:
#
配置基准路由对于基准路由的配置,可以依照 React 微应用接入 和 Vue 微应用接入 相同的方式改造接入。
#
主应用加载 Vite 应用主应用需要通过 loadScriptMode: import
来加载 ES modules 类型微应用(Vite 应用)。同时由于 Vite 应用在 dev 下注入 HMR 相关的代码,因此建议通过 entry 方式 接入,保证开发和生产的配置一致性。
#
示例 Repo- icestark-vite-vue 使用 Vite + Vue3 + VueRouter 创建的 icestark 微应用
- icestark-vite-react 使用 Vite + React 创建的 icestark 微应用
- icestark-vite-framework 使用 ice.js Vite 模式创建的 icestark 主应用