集团微前端标准的制定是时代发展的产物。2019年集团内外微前端框架如雨后春笋般出现,并在各 BU 落地了对应的业务实践。同时一些对微前端有定制化需求的 BU 想快速复用,但技术选型存在很高的门槛,对想要进入的 BU 成本非常大。
import { IAppConfig, IAppManifest, IOptions, IApp } from '@ali/wei-api'
const appConfig: IAppConfig = {
name: "wei-micro-app-example1",
entry: [
"//wei.alicdn.com/micro-app-example/0.1.0/index.js",
"//wei.alicdn.com/micro-app-example/0.1.0/index.css"
],
activePath: '/demo1',
props: {
title: 'currentTitle'
},
container: "#root-slave",
}
import { setup, start } from '@ali/wei';
import Sandbox from '@ali/sandbox;
setup({
appConfigs: [{
name: "wei-micro-app-example1",
entry: [
"//wei.alicdn.com/micro-app-example/0.1.0/index.js",
"//wei.alicdn.com/micro-app-example/0.1.0/index.css"
],
activePath: '/demo1',
// 传递下发的props
props: {
title: 'currentTitle'
},
// 根据 string 运行时查找DOM节点
container: "#root-slave",
}, {
name: "wei-micro-app-example2",
entry: {
"scripts": [
"//wei.alicdn.com/micro-app-example/0.1.0/chunk-libs.js",
"//wei.alicdn.com/micro-app-example/0.1.0/index.js"
],
"styles": [
"//wei.alicdn.com/micro-app-example/0.1.0/chunk-libs.css",
"//wei.alicdn.com/micro-app-example/0.1.0/index.css"
]
},
activePath: '/demo2',
}, {
name: "wei-micro-app-example3",
entry: "//wei.alicdn.com/micro-app-example/0.1.0/index.html",
activePath: '/demo3',
}],
options: {
sandbox: new Sandbox(),
prefetch: true,
// 生命周期钩子函数
beforeMount: (app) => {},
// ...
},
})
start();
import React, { useEffect, useRef } from 'react'
import { createMicroApp } from '@ali/wei';
interface IApp extends Required<IAppConfig> {
load(): void;
mount(container: HTMLElement, props?: object): void;
unmount(): void;
update(props?: object): void;
}
const APP = () => {
const containerRef: React.MutableRefObject<any> = useRef();
useEffect(() => {
const WidgetInstance: IApp = createMicroApp({
name: 'widgetName',
container: containerRef.current,
entry: [
"//wei.alicdn.com/micro-app-example/0.1.0/index.js",
"//wei.alicdn.com/micro-app-example/0.1.0/index.css"
],
}, {
sandbox: true,
prefetch: true
})
WidgetInstance.load();
}, [])
return (<div ref={containerRef}></div>)
}