Bootstrap

如何在微前端中加载 Vite 应用?

然而,在 icestark 中需要依赖微应用导出 生命周期函数 来渲染微应用。使用 <script > 标签加载 ES modules 脚本的一个难题在于无法获取微应用导出的生命周期函数。基于这个考虑,实际实现中是通过 Dynamic Import 来加载脚本:

const { mount, unmount } = await import(url);

Dynamic Import 的浏览器兼容性如下:

774a22542d033bc01833ea23a3ee0a92.png

可以认为,支持 ES modules 的浏览器版本,对 Dynamic Import 的支持也非常良好。同时,为了兼容旧版浏览器,通过 new Function() 将其包裹:

const dynamicImport = new Function(‘url’, ‘return import(url)’);

const { mount, unmount } = await dynamicImport(url);

至此,除了能支持 IIFE / UMD 规范的微应用之外,icestark 支持了 ES modules 规范的应用加载,并通过 import 类型标识。icestark 整体加载流程图如下:

d9804538914fcec085610251c17ed023.png

  Vite 应用的改造

对于微应用而言,需要导出 生命周期函数,并选择合适的加载方式即可。

生命周期函数的接入非常简单,在 Vite 应用的入口文件(Vue 项目通常是 main.t|js,React 应用通常是 app.t|jsx)声明函数(以 Vue 应用为例):

import { createApp } from ‘vue’

  • import type { App as Root} from ‘vue’;

import App from ‘./App.vue’

  • impor

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;