Skip to content

主应用api

jsapi

主要的

ts
const instance = new Merak(name, url, {
  loader, // 加载器
  proxy, // 沙箱
  loaderOptions, // 传给loader的值
  iframe, // iframeid
  timeout, // 过期时间,详见实例
})
const instance = new Merak(name, url, {
  loader, // 加载器
  proxy, // 沙箱
  loaderOptions, // 传给loader的值
  iframe, // iframeid
  timeout, // 过期时间,详见实例
})

其余的:

ts
// 预加载
// assets意味着不挂载script,script相反
declare function preload(type: 'script' | 'assets', ...args: ConstructorParameters<typeof Merak>): Merak<Loader>
// 设置公共错误处理
declare function setErrorHandler(cb: (arg: {
  type: 'missInstance' | 'missProperty' | 'loadError' | 'hasMount' | 'scriptError' | string
  error: Error
  instance?: Merak
}) => void): void
// 获得实例
declare function getInstance(id: string): Merak<Loader> | undefined
declare function getHost(id: string): Element | undefined
declare function getUrl(id: string): string
// 获得namespace
declare function $$namespace(): (typeof Merak)['namespace']
declare function $$namespace<K extends keyof (typeof Merak)['namespace']>(key: string): (typeof Merak)['namespace'][K]
// 预加载
// assets意味着不挂载script,script相反
declare function preload(type: 'script' | 'assets', ...args: ConstructorParameters<typeof Merak>): Merak<Loader>
// 设置公共错误处理
declare function setErrorHandler(cb: (arg: {
  type: 'missInstance' | 'missProperty' | 'loadError' | 'hasMount' | 'scriptError' | string
  error: Error
  instance?: Merak
}) => void): void
// 获得实例
declare function getInstance(id: string): Merak<Loader> | undefined
declare function getHost(id: string): Element | undefined
declare function getUrl(id: string): string
// 获得namespace
declare function $$namespace(): (typeof Merak)['namespace']
declare function $$namespace<K extends keyof (typeof Merak)['namespace']>(key: string): (typeof Merak)['namespace'][K]

其他的详见源码

Merak 实例

ts
declare class Merak<L extends Loader = Loader> {
  /** 分配的名字,等于data-merak-id */ id: string
  /** 源url */ url: string
  options: {
    loader?: L
    proxy?: ProxyGlobals
    loaderOptions?: any
    iframe?: string
    timeout?: number
  }

  /** 所有子应用共享 */
  static namespace: NameSpace
  /** 已经被占用的变量名 */
  static fakeGlobalVars: Set<string>
  /** 生命周期 */
  lifeCycle: LifeCycle
  /** work for preload */
  el: HTMLElement | null
  /** css隔离容器 */
  shadowRoot: ShadowRoot | null
  /** shadowroot 下的 document */
  sandHtml: HTMLHtmlElement | null
  /** iframe 容器 */
  iframe: HTMLIFrameElement | null
  /** window代理 */
  proxy: Window
  /** 性能管理器 */
  perf: Perf
  /** 所有全局的代理 */
  proxyMap: ProxyGlobals
  /** 子应用的html */
  template: string
  /** 加载器,负责加载html */
  loader: L | undefined
  /** 挂载数据 */
  props: Props
  /** 子应用激活标志 */
  activeFlag: boolean
  /** 子应用挂载次数 */
  mountIndex: number
  /** 子应用JS运行标志 */
  execPromise: Promise<void> | boolean
  /** 子应用mount标志 */
  mountFlag: boolean
  /** 子应用cache标志 */
  cacheFlag: boolean
  /** 子应用中的虚拟变量名 */
  fakeGlobalVar: string
  /** 传给loader的options */
  loaderOptions?: any
  /** 隔离的原生全局变量 */
  nativeVars: string[]
  /** 隔离的自定义全局变量 */
  customVars: string[]
  /** 快速切换页面时,当卸载->挂载时间小于这个数,不会触发子应用钩子.timeout为0时,则不走定时器,直接调用 */
  timeout: number
  protected timer: NodeJS.Timeout | null
  /** 防止重复加载 */
  protected loadPromise: Promise<any>
  /** 子应用的 base */
  baseUrl: string
  /**
     * 是否处于预加载状态
     * 'assets' 为预加载了资源
     * 'script' 为预执行了script,但不触发钩子
    */
  preloadStat: false | 'assets' | 'script'
  /** 缓存事件,卸载时被释放 */
  sideEffects: (() => void)[]
  constructor(
    id: string,
    url: string, options?: {
      loader?: L
      proxy?: ProxyGlobals
      loaderOptions?: any
      iframe?: string
      timeout?: number
    })
  static errorHandler({ type, error }: {
    type: string
    error: Error
    instance?: Merak
  }): void
  errorHandler({ type, error }: {
    type: string
    error: Error
  }): void
  get namespace(): NameSpace
  protected execCycle<Stage extends keyof LifeCycle>(stage: Stage, param?: Omit<Parameters<LifeCycle[Stage]>[0], 'instance'>): any
  protected cleanSideEffect(): void
  protected eventTrigger(el: HTMLElement | Window | Document, eventName: string, detail?: string): void
  setGlobalVars(fakeGlobalVar: string, nativeVars: string[], customVars: string[]): void
  active(): void
  load(): Promise<any>
  private mountTemplateAndScript
  mount(): void
  unmount(flag: string): void
  deactive(): void
  destroy(): void
}
declare class Merak<L extends Loader = Loader> {
  /** 分配的名字,等于data-merak-id */ id: string
  /** 源url */ url: string
  options: {
    loader?: L
    proxy?: ProxyGlobals
    loaderOptions?: any
    iframe?: string
    timeout?: number
  }

  /** 所有子应用共享 */
  static namespace: NameSpace
  /** 已经被占用的变量名 */
  static fakeGlobalVars: Set<string>
  /** 生命周期 */
  lifeCycle: LifeCycle
  /** work for preload */
  el: HTMLElement | null
  /** css隔离容器 */
  shadowRoot: ShadowRoot | null
  /** shadowroot 下的 document */
  sandHtml: HTMLHtmlElement | null
  /** iframe 容器 */
  iframe: HTMLIFrameElement | null
  /** window代理 */
  proxy: Window
  /** 性能管理器 */
  perf: Perf
  /** 所有全局的代理 */
  proxyMap: ProxyGlobals
  /** 子应用的html */
  template: string
  /** 加载器,负责加载html */
  loader: L | undefined
  /** 挂载数据 */
  props: Props
  /** 子应用激活标志 */
  activeFlag: boolean
  /** 子应用挂载次数 */
  mountIndex: number
  /** 子应用JS运行标志 */
  execPromise: Promise<void> | boolean
  /** 子应用mount标志 */
  mountFlag: boolean
  /** 子应用cache标志 */
  cacheFlag: boolean
  /** 子应用中的虚拟变量名 */
  fakeGlobalVar: string
  /** 传给loader的options */
  loaderOptions?: any
  /** 隔离的原生全局变量 */
  nativeVars: string[]
  /** 隔离的自定义全局变量 */
  customVars: string[]
  /** 快速切换页面时,当卸载->挂载时间小于这个数,不会触发子应用钩子.timeout为0时,则不走定时器,直接调用 */
  timeout: number
  protected timer: NodeJS.Timeout | null
  /** 防止重复加载 */
  protected loadPromise: Promise<any>
  /** 子应用的 base */
  baseUrl: string
  /**
     * 是否处于预加载状态
     * 'assets' 为预加载了资源
     * 'script' 为预执行了script,但不触发钩子
    */
  preloadStat: false | 'assets' | 'script'
  /** 缓存事件,卸载时被释放 */
  sideEffects: (() => void)[]
  constructor(
    id: string,
    url: string, options?: {
      loader?: L
      proxy?: ProxyGlobals
      loaderOptions?: any
      iframe?: string
      timeout?: number
    })
  static errorHandler({ type, error }: {
    type: string
    error: Error
    instance?: Merak
  }): void
  errorHandler({ type, error }: {
    type: string
    error: Error
  }): void
  get namespace(): NameSpace
  protected execCycle<Stage extends keyof LifeCycle>(stage: Stage, param?: Omit<Parameters<LifeCycle[Stage]>[0], 'instance'>): any
  protected cleanSideEffect(): void
  protected eventTrigger(el: HTMLElement | Window | Document, eventName: string, detail?: string): void
  setGlobalVars(fakeGlobalVar: string, nativeVars: string[], customVars: string[]): void
  active(): void
  load(): Promise<any>
  private mountTemplateAndScript
  mount(): void
  unmount(flag: string): void
  deactive(): void
  destroy(): void
}

web component

html
<merak-app data-merak-id="分配一个名字" />
<merak-app data-merak-id="分配一个名字" />

Released the MIT License.