web-infra-dev / garfish

A powerful micro front-end framework 🚚

Home Page:https://www.garfishjs.org

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

支持异步provider挂载

KyLeoHC opened this issue · comments

commented

Clear and concise description of the problem

在一些项目里,比如从高度集成的cli工具创建的项目,默认的入口同步执行脚本并不是src根目录里看到的那个index.js或者index.ts文件,实际上会间接套一层代码dynamic import你能看到的“伪入口文件”,平常帮别人排查provider不存在问题的时候,发现遇到这种问题的人真不少,有不少人其实对微前端的运行原理也没那么清楚,有些项目确实也不方便修改entry,所以期望可以允许异步挂载provider属性。

Suggested solution

  • 基于 #548 这个pr实现的子应用config能力,可以新增一个特定的配置项:
<script type="garfish-config">
  {
    "sandbox": {
      "noEntryScripts": ["scripts/no-entry.js"],
      "asyncProviderTimeout": 180000
    }
  }
</script>

其中asyncProviderTimeout是一个超时时间,单位是毫秒,即子应用告诉garfish,当前子应用的provider需要异步回调挂载,并且期望的最长回调挂载超时时间是180000ms(3分钟),3分钟后没有收到回调通知,那就超时报错;

  • checkAndGetProvider方法不再同步判断子应用有没有挂载provider属性,而是暴露一个garfish内部的callback函数给子应用;
  • 子应用异步entry文件加载执行后,及时回调通知:
if (__GARFISH_EXPORTS__) {
  __GARFISH_EXPORTS__.registerProvider(function provider() {  /* 省略多余代码... */  });
}

Alternative

No response

Additional context

No response

Validations

  • Read the Contributing Guidelines.
  • Check that there isn't already an issue that request the same feature to avoid creating a duplicate.