alibaba / ice

🚀 ice.js: The Progressive App Framework Based On React(基于 React 的渐进式应用框架)
https://ice.work
MIT License
17.8k stars 2.09k forks source link

feat: support ice2 main app and ice3 micro app #6905

Closed tkgkn closed 3 weeks ago

tkgkn commented 1 month ago

ice2主应用,ice3子应用的话,加载子应用提示找不到生命周期。原因是ice2的主应用会去读window.ICESTARK.library,获取当前子应用在window下的模块对象,但是ice3子应用不会往window.ICESTARK.library设置子应用的模块名称,而是直接挂到window下,如window.['ice3AppName'] = {mount: xx, unmount: xx},ice2读不到。

因此在@ice/plugin-stark插件增加了了一个参数,并在插件注入entryCode的部分,增加对这个参数的判断,如果有传入,就往window.ICESTARK.library设置子应用的模块名称。

ClarkXia commented 1 month ago

大部分场景下,其实都是可以自动获取的,如果需要额外设置,icestark 提供了一个方法可以直接调用,参考 https://micro-frontends.ice.work/docs/api/ice-stark-app/#setlibraryname

tkgkn commented 1 month ago

大部分场景下,其实都是可以自动获取的,如果需要额外设置,icestark 提供了一个方法可以直接调用,参考 https://micro-frontends.ice.work/docs/api/ice-stark-app/#setlibraryname

OK,看了下setLibraryname的确也是调的setCache方法,跟ice2子应用构建时设置library的方法一致。

但我这种ice2主应用接ice3微应用的场景,在ice3和ice-stark的文档里好像没有找到介绍,建议文档里加一下。这个不看源码实现,还真不知道。

tkgkn commented 1 month ago

删除了@ice/plugin-stark的改动,增加了ice3文档中关于微应用用ice3,主应用用ice2时,微应用改造增加调用setLibraryName的描述。