start
描述: micro-app注册函数,全局执行一次
介绍:
start (options?: {
tagName?: string, // 设置标签名称,默认为micro-app
iframe?: boolean, // 全局开启iframe沙箱,默认为false
inline?: boolean, // 全局开启内联script模式运行js,默认为false
destroy?: boolean, // 全局开启destroy模式,卸载时强制删除缓存资源,默认为false
// shadowDOM?: boolean, // 全局开启shadowDOM模式,默认为false
ssr?: boolean, // 全局开启ssr模式,默认为false
'disable-scopecss'?: boolean, // 全局禁用样式隔离,默认为false
'disable-sandbox'?: boolean, // 全局禁用沙箱,默认为false
'keep-alive'?: boolean, // 全局开启保活模式,默认为false
'disable-memory-router'?: boolean, // 全局关闭虚拟路由系统,默认值false
'keep-router-state'?: boolean, // 子应用在卸载时保留路由状态,默认值false
'disable-patch-request'?: boolean, // 关闭子应用请求的自动补全功能,默认值false
'router-mode'?: string, // 设置路由模式,共四种:search、native、native-scope、pure,默认为search
iframeSrc?: string, // 设置iframe沙箱中iframe的src地址,默认为子应用所在页面地址
// 全局生命周期
lifeCycles?: {
created?(e?: CustomEvent): void
beforemount?(e?: CustomEvent): void
mounted?(e?: CustomEvent): void
unmount?(e?: CustomEvent): void
error?(e?: CustomEvent): void
},
// 预加载,支持数组或函数
preFetchApps?: Array<{
name: string,
url: string,
disableScopecss?: boolean,
disableSandbox?: boolean,
// shadowDOM?: boolean
}> | (() => Array<{
name: string,
url: string,
disableScopecss?: boolean,
disableSandbox?: boolean,
// shadowDOM?: boolean
}>),
// 插件系统,用于处理子应用的js文件
plugins?: {
// 全局插件,作用于所有子应用的js文件
global?: Array<{
// 可选,强隔离的全局变量(默认情况下子应用无法找到的全局变量会兜底到主应用中,scopeProperties可以禁止这种情况)
scopeProperties?: string[],
// 可选,可以逃逸到外部的全局变量(escapeProperties中的变量会同时赋值到子应用和外部真实的window上)
escapeProperties?: string[],
// 可选,如果函数返回 `true` 则忽略 script 和 link 标签的创建
excludeChecker?: (url: string) => boolean
// 可选,如果函数返回 `true` ,则 micro-app 不会处理它,元素将原封不动进行渲染
ignoreChecker?: (url: string) => boolean
// 可选,传递给loader的配置项
options?: any,
// 可选,js处理函数,必须返回 code 值
loader?: (code: string, url: string, options: any, info: sourceScriptInfo) => string,
// 可选,html 处理函数,必须返回 code 值
processHtml?: (code: string, url: string, options: unknown) => string
}>
// 子应用插件
modules?: {
// appName为应用的名称,这些插件只会作用于指定的应用
[name: string]: Array<{
// 可选,强隔离的全局变量(默认情况下子应用无法找到的全局变量会兜底到主应用中,scopeProperties可以禁止这种情况)
scopeProperties?: string[],
// 可选,可以逃逸到外部的全局变量(escapeProperties中的变量会同时赋值到子应用和外部真实的window上)
escapeProperties?: string[],
// 可选,如果函数返回 `true` 则忽略 script 和 link 标签的创建
excludeChecker?: (url: string) => boolean
// 可选,如果函数返回 `true` ,则 micro-app 不会处理它,元素将原封不动进行渲染
ignoreChecker?: (url: string) => boolean
// 可选,传递给loader的配置项
options?: any,
// 必填,js处理函数,必须返回code值
loader?: (code: string, url: string, options: any, info: sourceScriptInfo) => string,
// 可选,html 处理函数,必须返回 code 值
processHtml?: (code: string, url: string, options: unknown) => string
}>
}
},
// 重定义fetch方法,可以用于拦截资源请求操作
fetch?: (url: string, options: Record<string, any>, appName: string | null) => Promise<string>
// 设置全局静态资源
globalAssets?: {
js?: string[], // js地址
css?: string[], // css地址
},
// 指定部分特殊的动态加载的微应用资源(css/js) 不被 micro-app 劫持处理
excludeAssetFilter?: (assetUrl: string) => boolean
// 基座对子应用 document 的一些属性进行自定义代理扩展
customProxyDocumentProps?: Map<string | number | symbol, (value: unknown) => void>
})
使用方式:
// index.js
import microApp from '@micro-zoe/micro-app'
microApp.start()
preFetch
描述: 预加载,在浏览器空闲时间,依照开发者传入的顺序,依次加载每个应用的静态资源
介绍:
preFetch([
{
name: string,
url: string,
disableScopecss?: boolean,
disableSandbox?: boolean,
},
])
使用方式:
import { preFetch } from '@micro-zoe/micro-app'
// 方式一
preFetch([
{ name: 'my-app1', url: 'xxx' },
{ name: 'my-app2', url: 'xxx' },
])
// 方式二
preFetch(() => [
{ name: 'my-app1', url: 'xxx' },
{ name: 'my-app2', url: 'xxx' },
])
getActiveApps
描述: 获取正在运行的子应用,不包含已卸载和预加载的应用
版本限制: 0.5.2及以上版本
介绍:
/**
* getActiveApps接受一个对象作为参数,详情如下:
* @param excludeHiddenApp 是否过滤处于隐藏状态的keep-alive应用,默认false
* @param excludePreRender 是否过滤预渲染的应用,默认false
*/
function getActiveApps({
excludeHiddenApp?: boolean,
excludePreRender?: boolean,
}): string[]
使用方式:
import { getActiveApps } from '@micro-zoe/micro-app'
// 获取所有正在运行的应用的名称
getActiveApps() // [子应用1name, 子应用2name, ...]
// 获取所有正在运行的应用的名称,但不包括已经处于隐藏状态的keep-alive应用
getActiveApps({ excludeHiddenApp: true })
// 获取所有正在运行的应用的名称,但不包括预渲染应用
getActiveApps({ excludePreRender: true })
getAllApps
描述: 获取所有子应用,包含已卸载和预加载的应用
版本限制: 0.5.2及以上版本
介绍:
function getAllApps(): string[]
使用方式:
import { getAllApps } from '@micro-zoe/micro-app'
getAllApps() // [子应用name, 子应用name, ...]
version
描述: 查看版本号
方式1:
import { version } from '@micro-zoe/micro-app'
方式2: 通过micro-app元素上的version属性查看
document.querySelector('micro-app').version
pureCreateElement
描述: 创建无绑定的纯净元素
使用方式:
import { pureCreateElement } from '@micro-zoe/micro-app'
const pureDiv = pureCreateElement('div')
document.body.appendChild(pureDiv)
removeDomScope
描述: 解除元素绑定,通常用于受子应用元素绑定影响,导致主应用元素错误绑定到子应用的情况
介绍:
/**
* @param force 解除元素绑定,并且一定时间内(一个微任务Promise时间)阻止再次绑定。
*/
function removeDomScope(force?: boolean): void
使用方式:
import { removeDomScope } from '@micro-zoe/micro-app'
// 解除元素绑定
removeDomScope()
// 解除元素绑定,并且一定时间内阻止再次绑定
removeDomScope(true)
unmountApp
描述: 手动卸载应用
版本限制: 0.6.1及以上版本
介绍:
// unmountApp 参数配置
interface unmountAppParams {
/**
* destroy: 是否强制卸载应用并删除缓存资源,默认值:false
* 优先级: 高于 clearAliveState
* 对于已经卸载的应用: 当子应用已经卸载或keep-alive应用已经推入后台,则清除应用状态及缓存资源
* 对于正在运行的应用: 当子应用正在运行,则卸载应用并删除状态及缓存资源
*/
destroy?: boolean
/**
* clearAliveState: 是否清空应用的缓存状态,默认值:false
* 解释: 如果子应用是keep-alive,则卸载并清空状态,并保留缓存资源,如果子应用不是keep-alive,则执行正常卸载流程,并保留缓存资源
* 补充: 无论keep-alive应用正在运行还是已经推入后台,都将执行卸载操作,清空应用缓存状态,并保留缓存资源
*/
clearAliveState?: boolean
}
function unmountApp(appName: string, options?: unmountAppParams): Promise<boolean>
使用方式:
// 正常流程
unmountApp(子应用名称).then(() => console.log('卸载成功'))
// 卸载应用并清空缓存资源
unmountApp(子应用名称, { destroy: true }).then(() => console.log('卸载成功'))
// 如果子应用是keep-alive应用,则卸载并清空状态,如果子应用不是keep-alive应用,则正常卸载
unmountApp(子应用名称, { clearAliveState: true }).then(() => console.log('卸载成功'))
// 如果destroy和clearAliveState同时为true,则clearAliveState将失效
unmountApp(子应用名称, { destroy: true, clearAliveState: true }).then(() => console.log('卸载成功'))
unmountAllApps
描述: 手动卸载所有应用
版本限制: 0.6.1及以上版本
介绍:
// unmountAllApps 参数配置
interface unmountAppParams {
/**
* destroy: 是否强制卸载应用并删除缓存资源,默认值:false
* 优先级: 高于 clearAliveState
* 对于已经卸载的应用: 当子应用已经卸载或keep-alive应用已经推入后台,则清除应用状态及缓存资源
* 对于正在运行的应用: 当子应用正在运行,则卸载应用并删除状态及缓存资源
*/
destroy?: boolean
/**
* clearAliveState: 是否清空应用的缓存状态,默认值:false
* 解释: 如果子应用是keep-alive,则卸载并清空状态,并保留缓存资源,如果子应用不是keep-alive,则执行正常卸载流程,并保留缓存资源
* 补充: 无论keep-alive应用正在运行还是已经推入后台,都将执行卸载操作,清空应用缓存状态,并保留缓存资源
*/
clearAliveState?: boolean
}
function unmountAllApps(options?: unmountAppParams): Promise<boolean>
使用方式:
// 正常流程
unmountAllApps().then(() => console.log('卸载成功'))
// 卸载所有应用并清空缓存资源
unmountAllApps({ destroy: true }).then(() => console.log('卸载成功'))
// 如果子应用是keep-alive应用,则卸载并清空状态,如果子应用不是keep-alive应用,则正常卸载
unmountAllApps({ clearAliveState: true }).then(() => console.log('卸载成功'))
// 如果destroy和clearAliveState同时为true,则clearAliveState将失效
unmountAllApps({ destroy: true, clearAliveState: true }).then(() => console.log('卸载成功'))
reload
描述: 重新渲染子应用
版本限制: 1.0.0及以上版本
介绍:
/**
* @param appName 应用名称,必传
* @param destroy 重新渲染时是否彻底删除缓存值,可选
*/
function reload(appName: string, destroy?: boolean): Promise<boolean>
使用方式:
import microApp from '@micro-zoe/micro-app'
// 案例一:重新渲染子应用my-app
microApp.reload('my-app').then((result) => {
if (result) {
console.log('重新渲染成功')
} else {
console.log('重新渲染失败')
}
})
// 案例二:重新渲染子应用my-app,并彻底删除缓存值
microApp.reload('my-app', true).then((result) => {
if (result) {
console.log('重新渲染成功')
} else {
console.log('重新渲染失败')
}
})
renderApp
描述: 手动渲染子应用
介绍:
interface RenderAppOptions {
name: string, // 应用名称,必传
url: string, // 应用地址,必传
container: string | Element, // 应用容器或选择器,必传
iframe?: boolean, // 是否切换为iframe沙箱,可选
inline?: boolean, // 开启内联模式运行js,可选
'disable-scopecss'?: boolean, // 关闭样式隔离,可选
'disable-sandbox'?: boolean, // 关闭沙箱,可选
'disable-memory-router'?: boolean, // 关闭虚拟路由系统,可选
'default-page'?: string, // 指定默认渲染的页面,可选
'keep-router-state'?: boolean, // 保留路由状态,可选
'disable-patch-request'?: boolean, // 关闭子应用请求的自动补全功能,可选
'keep-alive'?: boolean, // 开启keep-alive模式,可选
destroy?: boolean, // 卸载时强制删除缓存资源,可选
fiber?: boolean, // 开启fiber模式,可选
baseroute?: string, // 设置子应用的基础路由,可选
ssr?: boolean, // 开启ssr模式,可选
// shadowDOM?: boolean, // 开启shadowDOM,可选
data?: Object, // 传递给子应用的数据,可选
onDataChange?: Function, // 获取子应用发送数据的监听函数,可选
// 注册子应用的生命周期
lifeCycles?: {
created(e: CustomEvent): void, // 加载资源前触发
beforemount(e: CustomEvent): void, // 加载资源完成后,开始渲染之前触发
mounted(e: CustomEvent): void, // 子应用渲染结束后触发
unmount(e: CustomEvent): void, // 子应用卸载时触发
error(e: CustomEvent): void, // 子应用渲染出错时触发
beforeshow(e: CustomEvent): void, // 子应用推入前台之前触发(keep-alive模式特有)
aftershow(e: CustomEvent): void, // 子应用推入前台之后触发(keep-alive模式特有)
afterhidden(e: CustomEvent): void, // 子应用推入后台时触发(keep-alive模式特有)
},
}
/**
* @param options RenderAppOptions 配置项
*/
function renderApp(options: RenderAppOptions): Promise<boolean>
使用方式:
import microApp from '@micro-zoe/micro-app'
// 案例一
microApp.renderApp({
name: 'my-app',
url: 'http://localhost:3000',
container: '#container',
}).then((result) => {
if (result) {
console.log('渲染成功')
} else {
console.log('渲染失败')
}
})
// 案例二
microApp.renderApp({
name: 'my-app',
url: 'http://localhost:3000',
container: '#container',
inline: true,
data: { key: '初始化数据' },
lifeCycles: {
mounted () {
console.log('子应用已经渲染')
},
unmount () {
console.log('子应用已经卸载')
},
}
})
document.microAppElement
描述: 获取子应用所在的micro-app
元素。
限制: 只能在子应用内部使用,基座中可以使用document.querySelector
获取micro-app元素
使用方式:
document.microAppElement.appendChild(...)
setData
描述: 向指定的子应用发送数据
介绍:
setData(appName: String, data: Object)
使用方式:
import microApp from '@micro-zoe/micro-app'
// 发送数据给子应用 my-app,setData第二个参数只接受对象类型
microApp.setData('my-app', {type: '新的数据'})
getData
描述: 获取指定的子应用data数据
介绍:
getData(appName: String): Object
使用方式:
import microApp from '@micro-zoe/micro-app'
const childData = microApp.getData('my-app') // 返回my-app子应用的data数据
addDataListener
描述: 监听指定子应用的数据变化
介绍:
/**
* 绑定监听函数
* appName: 应用名称
* dataListener: 绑定函数
* autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
*/
microApp.addDataListener(appName: string, dataListener: Function, autoTrigger?: boolean)
使用方式:
import microApp from '@micro-zoe/micro-app'
function dataListener (data) {
console.log('来自子应用my-app的数据', data)
}
microApp.addDataListener('my-app', dataListener)
removeDataListener
描述: 解除主应用的数据监听函数
使用方式:
import microApp from '@micro-zoe/micro-app'
function dataListener (data) {
console.log('来自子应用my-app的数据', data)
}
// 解绑监听my-app子应用的数据监听函数
microApp.removeDataListener('my-app', dataListener)
clearDataListener
描述: 清空主应用的所有数据监听函数
使用方式:
import microApp from '@micro-zoe/micro-app'
// 清空所有监听appName子应用的数据监听函数
microApp.clearDataListener('my-app')
getGlobalData
描述: 获取全局数据
使用方式:
import microApp from '@micro-zoe/micro-app'
// 直接获取数据
const globalData = microApp.getGlobalData() // 返回全局数据
addGlobalDataListener
描述: 绑定数据监听函数
介绍:
/**
* 绑定监听函数
* dataListener: 绑定函数
* autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
*/
microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean)
使用方式:
import microApp from '@micro-zoe/micro-app'
function dataListener (data) {
console.log('全局数据', data)
}
microApp.addGlobalDataListener(dataListener)
removeGlobalDataListener
描述: 解绑全局数据监听函数
使用方式:
import microApp from '@micro-zoe/micro-app'
function dataListener (data) {
console.log('全局数据', data)
}
microApp.removeGlobalDataListener(dataListener)
clearGlobalDataListener
描述: 清空主应用绑定的所有全局数据监听函数
使用方式:
import microApp from '@micro-zoe/micro-app'
microApp.clearGlobalDataListener()
setGlobalData
描述: 发送全局数据
使用方式:
import microApp from '@micro-zoe/micro-app'
// setGlobalData只接受对象作为参数
microApp.setGlobalData({type: '全局数据'})
pureCreateElement
描述: 创建无绑定的纯净元素,该元素可以逃离元素隔离的边界,不受子应用沙箱的控制
版本限制: 0.8.2及以上版本
使用方式:
const pureDiv = window.microApp.pureCreateElement('div')
document.body.appendChild(pureDiv)
removeDomScope
描述: 解除元素绑定,通常用于受子应用元素绑定影响,导致主应用元素错误绑定到子应用的情况
版本限制: 0.8.2及以上版本
介绍:
/**
* @param force 解除元素绑定,并且一定时间内(一个微任务Promise时间)阻止再次绑定。
*/
function removeDomScope(force?: boolean): void
使用方式:
// 解除元素绑定
window.microApp.removeDomScope()
// 解除元素绑定,并且一定时间内阻止再次绑定
window.microApp.removeDomScope(true)
rawWindow
描述: 获取真实的window
使用方式:
window.rawWindow
rawDocument
描述: 获取真实的document
使用方式:
window.rawDocument
getData
描述: 获取主应用下发的data数据
使用方式:
const data = window.microApp.getData() // 返回主应用下发的data数据
addDataListener
描述: 绑定数据监听函数
介绍:
/**
* 绑定监听函数,监听函数只有在数据变化时才会触发
* dataListener: 绑定函数
* autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
* !!!重要说明: 因为子应用是异步渲染的,而主应用发送数据是同步的,
* 如果在子应用渲染结束前主应用发送数据,则在绑定监听函数前数据已经发送,在初始化后不会触发绑定函数,
* 但这个数据会放入缓存中,此时可以设置autoTrigger为true主动触发一次监听函数来获取数据。
*/
window.microApp.addDataListener(dataListener: Function, autoTrigger?: boolean)
使用方式:
function dataListener (data) {
console.log('来自主应用的数据', data)
}
window.microApp.addDataListener(dataListener)
removeDataListener
描述: 解绑数据监听函数
使用方式:
function dataListener (data) {
console.log('来自主应用的数据', data)
}
window.microApp.removeDataListener(dataListener)
clearDataListener
描述: 清空当前子应用的所有数据监听函数(全局数据函数除外)
使用方式:
window.microApp.clearDataListener()
dispatch
描述: 向主应用发送数据
使用方式:
// dispatch只接受对象作为参数
window.microApp.dispatch({type: '子应用发送的数据'})
getGlobalData
描述: 获取全局数据
使用方式:
const globalData = window.microApp.getGlobalData() // 返回全局数据
addGlobalDataListener
描述: 绑定数据监听函数
介绍:
/**
* 绑定监听函数
* dataListener: 绑定函数
* autoTrigger: 在初次绑定监听函数时如果有缓存数据,是否需要主动触发一次,默认为false
*/
window.microApp.addGlobalDataListener(dataListener: Function, autoTrigger?: boolean)
使用方式:
function dataListener (data) {
console.log('全局数据', data)
}
window.microApp.addGlobalDataListener(dataListener)
removeGlobalDataListener
描述: 解绑全局数据监听函数
使用方式:
function dataListener (data) {
console.log('全局数据', data)
}
window.microApp.removeGlobalDataListener(dataListener)
clearGlobalDataListener
描述: 清空当前子应用绑定的所有全局数据监听函数
使用方式:
window.microApp.clearGlobalDataListener()
setGlobalData
描述: 发送全局数据
使用方式:
// setGlobalData只接受对象作为参数
window.microApp.setGlobalData({type: '全局数据'})