用于初始化全局配置、注册子应用信息,并启动基于路由匹配的子应用自动渲染流程。
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-modulegarfish 官方插件支持此能力,但这会带来严重的性能问题,原因。如果你的项目不是很需要在 vm 沙箱下运行,此时可以关闭沙箱;
若开启快照沙箱,请注意:
true;autoRefreshApp, 则跳转 子应用子路由 将只能通过 Garfish.router 进行跳转,使用框架自身路由 API(如 react-router)跳转将失效;Type: string[]
在开启沙箱的情况下,提供使得 window 上的某些变量处于受保护状态的能力:这些值的读写不会受到沙箱隔离机制的影响,所有应用均可读取到,可选;
若希望在应用间共享 window 上的某些值,可将该值放置在数组中;
该属性与 setGlobalValue 功能相同,推荐使用 protectVariable 属性,通过 protectVariable 可以明确的感知哪些值可能在应用间相互影响;
window.xxxx = 123console.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, sequentialbeforeLoad、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:
示例