【发布时间】:2021-07-23 13:22:16
【问题描述】:
在过去的几天里,我正在研究微前端的概念。在微前端中,我们为所有应用程序创建 bundles,其中每个包代表一个单独的 Web 应用程序,最后我们在 base 应用程序中编写与这些包通信的逻辑。
例如,假设我们有 APP 1、APP 2 和 APP 3 是我们捆绑并在 BASE APP 中使用的微前端。
有没有什么方法可以在运行时动态加载这些应用程序,而无需创建单个应用程序包?
我知道我们可以使用 iFrame,但它不允许跨域访问 iFrame
【问题讨论】:
-
这在很大程度上取决于上下文。加载一个应用程序,可以像动态添加脚本元素到网页一样简单,也可以像计算共享组件、生命周期事件、通信协议等一样复杂。跨域问题(以及其他安全机制,如 CSP)当然很重要,但你真的需要跨越起源吗?你用“角度”标记了你的问题——我们应该假设所有应用程序都是我们吗?或者只是 Angular 中的基础应用程序和子应用程序使用不同的设置?应用程序是如何构建的?什么服务于 HTML 页面,编译后的 JavaScript 托管在哪里?
-
这只是冰山一角。如果您从一个新项目开始,请不要从微前端开始。如果您想优化代码交付,只需使用代码拆分或其他一些技术。如果你真的需要微前端(我能想到的唯一原因是多个团队处理相同代码的组织复杂性——任何其他原因都很难证明复杂性或性能影响是合理的)。查看该想法的创始人之一 Cam Jackson 的广泛介绍文章:martinfowler.com/articles/micro-frontends.html。包括捆绑和装载。
标签: javascript angular iframe runtime micro-frontend