支持异步provider挂载
KyLeoHC opened this issue · comments
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.