WasmUX
← 返回文档列表

微前端指南

快速配置

javascript
import { registerMicroApps, start, initGlobalState } from '@jianghuizhong/wasmux/micro';

registerMicroApps([{
  name: 'app1',
  entry: '//localhost:3001',
  container: '#micro-container',  // 独立于主壳,避免 update 时被替换
  activeRule: '/app1',
  props: { userId: 123 },
}]);

// 全局状态:子应用通过 props 获取
const actions = initGlobalState({ user: null, theme: 'light' });
actions.onGlobalStateChange((state, prev) => console.log('state', state));

start({ prefetch: true, sandbox: true });

initGlobalState 全局状态

initGlobalState 用于主应用与子应用间共享状态。子应用通过 props 接收。onGlobalStateChange 监听状态变化。

loadMicroApp 手动加载

适用于弹窗、抽屉等场景,需手动控制子应用加载与卸载:

javascript
import { loadMicroApp } from '@jianghuizhong/wasmux/micro';

// 手动加载(弹窗等)
const modal = await loadMicroApp({
  name: 'modal',
  entry: '//localhost:3002',
  container: '#modal-container',
});
// 关闭时卸载
await modal.unmount();

容器分离(重要)

子应用容器 #micro-container 必须与主壳 WasmUXApp 的 #app 分开,否则主壳 app.update() 会替换掉子应用挂载点。

HTML 结构示例:

html
<!-- 主壳:WasmUXApp 挂载 -->
<div id="app"></div>

<!-- 子应用:独立容器,与 #app 分开 -->
<div id="micro-container"></div>

Web Component

使用 <wasmux-micro-app> 前需先注册:

javascript
import { registerWasmuxMicroAppElement } from '@jianghuizhong/wasmux';
registerWasmuxMicroAppElement();
html
<wasmux-micro-app
  name="app1"
  entry="http://localhost:3001"
  container="#container"
  active-rule="/app1"
  :props='{"userId": 123}'
></wasmux-micro-app>

四层隔离

JS、样式、路由、Wasm 四层隔离,内置加密通信,子应用接入 ≤3 步。