我正在研究如何将一个巨大的单页单体拆分成一个微前端架构。
要高效地开发大型应用程序,您需要有很多人参与其中。然而,每个应用程序/团队的开发人员数量并没有很好地扩展。独立团队并行开发多个独立应用程序,但可以任意扩展
考虑到这一点,团队必须选择自己的工具栈,尤其是对第三方库(如 angular、react、jquery)执行独立的版本升级。如果不是这种情况,则框架更新需要与每个组件兼容,然后才能将其部署到生产环境中。
虽然独立的版本升级是必要的,但将团队限制在几个受支持的框架(Angular、React、Vue、Polymer...)上是合理的,现在我尝试构建一个纯粹由 Angular 组成的演示-应用。
然而,尽管 Angular 5 被认为是支持大型多模块应用程序的平台框架,但在同一浏览器窗口中运行多个独立的 Angular 应用程序似乎几乎是不可能的。
我设法通过使用 HTML 导入在单个 Web 应用程序上引导多个 Angular 应用程序(不同版本,每个都托管在自己的服务器上)。但是,有几个global 依赖项需要在应用程序之间共享
网上有几篇关于如何引导多个 Angular 模块的文章,但它们都引用了同一个核心应用程序中的多个模块,这反过来意味着它们都在同一个框架版本上运行,并且更新意味着您必须重建和部署整个整体。
除了“iframe”之外,还有其他解决方案可以让多个 Angular (5) 应用程序在同一页面上运行吗?
最佳答案
我不会直接建议反对这个想法,主要是因为单独的堆栈要求,我会列出权衡并提供一些限制,这将使这成为可能。
the page consists of several components which would be running autonomously
我们都知道这是在 Angular 组件中开箱即用的,具有明确的输入和输出界限。
小警告:当/如果您为 @Input 传递对象并使用 @Output() 发出事件对象时,交互组件必须预先就定义的接口(interface)达成一致。
解决方法:创建另一个仅定义这些工件的 TypeScript 项目。所有其他“组件项目”将取决于此的特定版本。
each component is managed by one dev-team
开发团队可以像开源中的其他 Angular 项目一样分发组件。他们可以将他们的工件发布到某个 npm 存储库。开发属性组件我推荐你引用Angular Material2这可能会让人不知所措,或者您可以使用类似 ngx-library-builder 的东西(基于 Angular Team Member filipesilva/angular-quickstart-lib )每个组件团队使用。
警告:到目前为止,angular 团队还没有像 Angular CLI 中那样的快速组件库共享项目设置。但是许多开发人员已经创建了某种库构建器来填补 Angular CLI 中的空白。
each team can change, update and deploy their components without breaking components of other teams
让您的主项目拉取所有组件并在某些 CI 服务器上执行定期/更改触发的构建/部署。这实质上是使用所有最新的组件版本生成 AOT 生产版本。 作为额外的好处,您可以构建一些抽象的端到端测试来执行一些自动化集成测试,确保一个组件的副作用不会破坏其他组件。
警告:很难管理每个团队如何开发组件,即他们如何优化内存、CPU 和其他资源的使用和配置。例如如果一个团队开始创建订阅并且不删除它们怎么办。使用一些静态代码分析可能会有用,但此时您将无法获得此源代码 - 除非他们也发布了他们的源代码。
each team chooses its own toolstack
除非您指的是开发人员工具(如 IDE 和某些“devDependencies”)中的“toolstack”,否则这是一个彻底的交易破坏者。尽管每个团队的“devDependencies”的某些部分必须具有完全相同的 Angular 开发工具包版本,例如编译器等。
至少每个团队必须使用相同的 Angular、RxJS 等。
最重要的是要注意,每个团队都不会引导任何组件——只有主项目会有一个引导模块,它将引导根组件。这将有助于回答您的 zone.js 问题
Does this work with Angular?
如果您认识到局限性并提供治理,我建议您去做。
关于javascript - Angular 和微前端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47793065/
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
在Rails3.x应用程序中,我正在使用net::ssh并向远程pc运行一些命令。我想向用户的浏览器显示实时日志。比如,如果两个命令在net中运行::ssh执行即echo"Hello",echo"Bye"被传递然后"Hello"应该在执行后立即显示在浏览器中。这是代码我在rubyonrails应用程序中使用ssh连接和运行命令Net::SSH.start(@servers['local'],@machine_name,:password=>@machine_pwd,:timeout=>30)do|ssh|ssh.open_channeldo|channel|channel.requ
我尝试在Internet上搜索有关使用angularJS进入RubyonRails项目与RubyonRailspure的View性能的信息。我的问题是因为2个月前我开始使用纯AngularJS,现在我需要将AngularJS集成到一个新项目中,但需要展示使用带有RubyonRails的AngularJS呈现View的性能如何,并消除对RubyonRails的负担.例如:带Rails的Angular:使用RubyonRails获取数据(从数据库或GET请求),将信息发送到file.js.erb并使用AngularJS操作数据并显示带有解析数据的View。纯粹的Rails:(自然流程)使用
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我正在为Jekyll编写一个转换器插件,需要访问一些页眉(YAML前端)属性。只有内容被传递给主要的转换器方法,似乎无法访问上下文。例子:moduleJekyllclassUpcaseConverter关于如何在转换器插件中访问页眉数据有什么想法吗? 最佳答案 基于Jekyll源代码,无法在转换器中检索YAML前端内容。根据您的情况,我看到了两种可行的解决方案。您的文件扩展名可以具有足够的描述性,以提供您本应包含在前言中的信息。看起来Converter插件的设计就是这么基本的。如果修改Jekyll是一个选项,您可以更改Convert
我需要一些指导来了解如何将Angular整合到rails中。选择Rails的原因:我喜欢他们偏执的做事方式。还有迁移,gem真的很酷。使用angular的原因:我正在研究和寻找最适合SPA的框架。Backbone似乎太抽象了。我不得不在Angular和Ember之间做出选择。我首先开始阅读Angular,它对我来说很有意义。所以我从来没有去读过关于ember的文章。使用Angular和Rails的原因:我研究并尝试使用小型框架,例如grape、slim(是的,我也使用php)。但我觉得需要坚持项目的长期范围。我个人喜欢用Rails的方式做事。这就是我需要帮助的地方,我在Rails4中有
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click