用于初始化全局配置、注册子应用信息,并启动基于路由匹配的子应用自动渲染流程。
garfish 基于
activeWhen
参数自动进行子应用激活匹配,可参考 activeWhen 了解 garfish 路由匹配逻辑;
{}
options
string
类型时需要其值是 selector
, Garfish 内部会使用 document.querySelector(domGetter)
去选中子应用的挂载点string
类型的 domGetter
时,子应用在触发渲染后并不会若当前文档流上并不存在挂载点,Garfish
框架内部在 3s
内轮讯是否有挂载点domGetter
在子应用渲染时无法查询到挂载点,则会丢出 domGetter
无效的异常basename + activeWhen
计算的值basename
为实际传入的值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)跳转将失效;protectVariable
属性,通过 protectVariable
可以明确的感知哪些值可能在应用间相互影响;window.xxxx = 123
console.log(window.xxxx)
,输出 123Garfish
的主子应用环境是隔离的,但是子应用的环境继承至主应用时可能会造成一些影响不符合预期insulationVariable
配置,例如:
insulationVariable: ['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
;activeApps
中已添加当前子应用 app 实例;sync
, sequential
activeApps
当前 app 已移除;destory
函数,用户可在销毁前定义相关操作;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:
示例