用于初始化全局配置、注册子应用信息,并启动基于路由匹配的子应用自动渲染流程。
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-modulegarfish 官方插件支持此能力,但这会带来严重的性能问题,原因。如果你的项目不是很需要在 vm 沙箱下运行,此时可以关闭沙箱;
若开启快照沙箱,请注意:
true;autoRefreshApp, 则跳转 子应用子路由 将只能通过 Garfish.router 进行跳转,使用框架自身路由 API(如 react-router)跳转将失效;protectVariable 属性,通过 protectVariable 可以明确的感知哪些值可能在应用间相互影响;window.xxxx = 123console.log(window.xxxx),输出 123Garfish 的主子应用环境是隔离的,但是子应用的环境继承至主应用时可能会造成一些影响不符合预期insulationVariable 配置,例如:
insulationVariable: ['xxxx']console.log(window.xxxx) 输出 undefinedType: 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、afterMountapp.unmount 或 app.hide 触发该 hook,用户除了手动调用这两个方法外,Garfish Router 托管模式还会自动触发
app.unmount 渲染应用是 cacheMode 为 false;app.hide 渲染应用是 cacheMode 为 true;activeApps 中已添加当前子应用 app 实例;sync, sequentialactiveApps 当前 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:
示例