用于初始化全局配置、注册子应用信息,并启动基于路由匹配的子应用自动渲染流程。
garfish 基于
activeWhen
参数自动进行子应用激活匹配,可参考 activeWhen 了解 garfish 路由匹配逻辑;
{}
options
子应用的默认挂载点,可选,没有默认值,若省略需要在子应用 AppInfo 中单独指定。二者同时存在时,子应用指定优先级更高;
当提供 string
类型时需要其值是 selector
, Garfish 内部会使用 document.querySelector(domGetter)
去选中子应用的挂载点
当提供 string
类型的 domGetter
时,子应用在触发渲染后并不会若当前文档流上并不存在挂载点,Garfish
框架内部在 3s
内轮讯是否有挂载点
当提供函数时,将在子应用挂载过程中执行此函数,并期望返回一个 dom 元素;
若 domGetter
在子应用渲染时无法查询到挂载点,则会丢出 domGetter
无效的异常
Type: string
子应用的基础路径,可选,默认值为全局 basename;
通过路由驱动自动加载子应用时实际传递给子应用的 basename 为 basename + activeWhen
计算的值
若手动载入渲染应用时 basename
为实际传入的值
通过 provider 函数 的 basename
参数透传给子应用,子应用需要将 basename 设置为相应子应用的基础路由,这是必须的;
provider
导出函数 生命周期方法中将接收到此数据;false
。默认情况下 Garfish 会开启子应用的资源预加载能力;false
。默认情况下 Garfish 会自动收集子应用的资源,用于进行监控分析;Type: SandboxConfig | false 可选,默认值为 全局 sandbox 配置,当设置为 false 时关闭沙箱;
SandboxConfig:
请注意:
如果你在沙箱内自定义的行为将会产生副作用,请确保在 recover 函数中清除你的副作用,garfish 将在应用卸载过程中执行 recover 函数销毁沙箱副作用,否则可能会造成内存泄漏。
在什么情况下我应该关闭 sandbox ?
Garfish 目前已默认支持沙箱 esModule 能力,若需要在 vm 沙箱支持 esModule 应用,请使用
@garfish/es-module
garfish 官方插件支持此能力,但这会带来严重的性能问题,原因。如果你的项目不是很需要在 vm 沙箱下运行,此时可以关闭沙箱;
若开启快照沙箱,请注意:
true
;autoRefreshApp
, 则跳转 子应用子路由 将只能通过 Garfish.router 进行跳转,使用框架自身路由 API(如 react-router)跳转将失效;Type: string[]
在开启沙箱的情况下,提供使得 window 上的某些变量处于受保护状态的能力:这些值的读写不会受到沙箱隔离机制的影响,所有应用均可读取到,可选;
若希望在应用间共享 window 上的某些值,可将该值放置在数组中;
该属性与 setGlobalValue 功能相同,推荐使用 protectVariable
属性,通过 protectVariable
可以明确的感知哪些值可能在应用间相互影响;
window.xxxx = 123
console.log(window.xxxx)
,输出 123Garfish
的主子应用环境是隔离的,但是子应用的环境继承至主应用时可能会造成一些影响不符合预期insulationVariable
配置,例如:
insulationVariable: ['xxxx']
'xxxx' 在子应用中将不会继承至主应用,console.log(window.xxxx)
输出 undefined
Type: async (appInfo: AppInfo, appInstance: App) => false | undefined
hook
的参数分别为:应用信息、应用实例;false
时将中断子应用的加载及后续流程;Kind: async
, sequential
Trigger:
Garfish.load
时触发该 hook
示例
Type: async (appInfo: AppInfo, appInstance: interfaces.App) => void
该 hook
的参数分别为:应用信息、应用实例;
Kind: async
, sequential
Trigger:
Garfish.load
后并且子应用加载完成时触发该 hook
;示例
Type: (error: Error, appInfo: AppInfo, appInstance: interfaces.App) => void
hook
的参数分别为:error
实例、 appInfo
信息、appInstance
应用实例Kind: sync
, sequential
Trigger:
Garfish.load
过程中,并且加载失败时触发该 hook
示例
Type: (appInfo: AppInfo, appInstance: interfaces.App, cacheMode: boolean) => void
hook
的参数分别为:appInfo
信息、appInstance
应用实例、是否为 缓存模式
渲染和销毁Kind: sync
, sequential
Previous Hook: beforeEval
、afterEval
Trigger:
app.mount
或 app.show
触发该 hook
,用户除了手动调用这两个方法外,Garfish Router
托管模式还会自动触发
app.mount
渲染应用是 cacheMode
为 false
;app.show
渲染应用是 cacheMode
为 true
;示例
Type: (appInfo: AppInfo, appInstance: interfaces.App, cacheMode: boolean) => void
hook
的参数分别为:appInfo
信息、appInstance
应用实例、是否为 缓存模式
渲染和销毁Kind: sync
, sequential
Previous Hook: beforeLoad
、afterLoad
、beforeMount
Trigger:
activeApps
中已添加当前子应用 app 实例;render
函数,用户可在挂载前定义相关操作;示例
Type: (appInfo: AppInfo, code: string, env: Record<string, any>
, url: string, options) => void
hook
的参数分别为:appInfo
信息、code
执行的代码、env
要注入的环境变量,url
代码的资源地址、options
参数选项(例如 async
是否异步执行、noEntry
是否是 noEntry
模式);Kind: sync
, sequential
Previous Hook: beforeMount
Trigger:
示例
Type: (appInfo: AppInfo, code: string, env: Record<string, any>
, url: string, options) => void
hook
的参数分别为:appInfo
信息、code
执行的代码、env
要注入的环境变量,url
应用访问地址、options
参数选项例如 async
是否异步执行、noEntry
是否是 noEntry
模式;Kind: sync
, sequential
Previous Hook: beforeLoad
、afterLoad
Trigger:
afterMount
触发前触发;示例
Type: (error: Error, appInfo: AppInfo, appInstance: interfaces.App) => void
Kind: sync
, sequential
Previous Hook: beforeLoad
、afterLoad
、beforeMount
、afterMount
Trigger:
hook
,子应用同步执行的代码出现异常会触发该 hook
,异步代码无法触发示例
sync
, sequential
beforeLoad
、afterLoad
、beforeMount
、afterMount
在调用 app.unmount
或 app.hide
触发该 hook
,用户除了手动调用这两个方法外,Garfish Router
托管模式还会自动触发
app.unmount
渲染应用是 cacheMode
为 false
;app.hide
渲染应用是 cacheMode
为 true
;此时子应用 DOM 元素还未卸载,副作用尚未清除;
此时子应用 DOM 树已渲染完成,garfish 实例 activeApps
中已添加当前子应用 app 实例;
sync
, sequential
此时,应用在渲和运行过程中产生的副作用已清除,DOM 已卸载,沙箱副作用已清除,garfish 实例 activeApps
当前 app 已移除;
在应用销毁过程中会调用应用生命周期中的 destory
函数,用户可在销毁前定义相关操作;
若应用卸载过程中出现异常,会触发 errorUnmountApp
Type: (error: Error, appInfo: AppInfo, appInstance: interfaces.App)=> void
Kind: sync
, sequential
Trigger:
app.unmount
或 app.hide
销毁过程中出现异常则会触发该 hook
,用户除了手动调用这两个方法外,Garfish Router
托管模式还会自动触发示例
Type: (path: string)=> void
hook
的参数分别为:应用信息、应用实例;Kind: sync
, sequential
Trigger:
示例