【发布时间】:2018-05-27 08:17:19
【问题描述】:
我正在研究如何将一个巨大的单页单体拆分成一个微前端架构。
想法:
- 页面由几个可以自主运行的组件组成
- 每个组件都由一个开发团队管理
- 每个团队都可以更改、更新和部署他们的组件,而不会破坏其他团队的组件
- 每个团队都选择自己的工具栈
原因
要高效地开发大型应用程序,您需要有很多人参与其中。然而,每个应用程序/团队的开发人员数量并不能很好地扩展。独立团队并行开发多个独立应用,但可以任意扩展
考虑到这一点,团队必须选择自己的工具栈,尤其是执行第三方库(如 Angular、React、jquery)的独立版本升级。如果不是这种情况,则框架更新需要与每个组件兼容,然后才能将其部署到生产环境。
这适用于 Angular 吗?
虽然独立的版本升级是必要的,但将团队限制在一些受支持的框架(Angular、React、Vue、Polymer...)是合理的,现在我尝试构建一个纯粹由 Angular 组成的演示 -应用程序。
然而,尽管 Angular 5 被认为是一个支持大型多模块应用程序的平台框架,但在同一个浏览器窗口中运行多个独立的 Angular 应用程序似乎几乎是不可能的。
我设法通过利用 HTML-Imports 在单个 web 应用程序上引导多个 Angular 应用程序(不同版本,每个都托管在自己的服务器上)。但是有几个 global 依赖项需要在应用程序之间共享
- zone.js 只能启动一次
- 路由需要更改 url
- cookies、sessionstorage 等浏览器内容...
网上有几篇关于如何引导多个角度模块的文章,但它们都引用同一个核心应用程序中的多个模块,这反过来意味着它们都运行在相同的框架版本和更新手段上你必须重建和部署整个单体。
除了“iframes”之外,还有什么解决方案可以让多个 Angular (5) 应用在同一个页面上运行?
【问题讨论】:
-
this 对您来说可能是一本有趣的书。这是关于 Azure 门户的构建方式,与您所描述的方式类似,尽管它们确实使用 iframe 但不呈现 UI:
They can only run script in their IFRAME - which does not project UI.和IFRAMEs are not used to render the UI - that’s all done in the core frame. The IFRAME is only used to automate the JavaScript APIs that communicate over window.postMessage(). -
非常好的问题。我们面临同样的挑战,但不幸的是,在 Angular 社区/团队中似乎没有太多关注这个话题。一线希望似乎是 Angular 元素。但自宣布以来,没有太多关于它的信息。请参阅 github.com/angular/angular/issues/20891 - 自 30 天以来未回答。使用 vue 或 react 之类的框架,似乎可以为微服务创建复合 ui。我想知道为什么这个用例还没有被 Angular 覆盖。
-
@Daniel FYI Angular WebComponents 不能解决操作员提出的问题。目前,您使用 Angular 开发的所有 Web 组件都必须全部“挂钩”到 Angular 加载时作为引导程序的相同版本。因此,您将无法让不同的团队开发不同版本的 Angular,并将所有组件加载到一个 Angular 应用程序中。
-
我想知道你是如何解决这个问题的?您是否继续使用此处提到的任何解决方案?如果你能分享你的解决方案,我会很高兴。我面临着完全相同的问题。
标签: javascript html angular microservices