【问题标题】:Separating Angularjs and Rails apps as standalone components将 Angularjs 和 Rails 应用程序分离为独立组件
【发布时间】:2013-08-12 09:52:35
【问题描述】:

我想试试 Angularjs。但是,我一直难以决定应该将我的 Angular 应用程序放在哪里。

我在后端使用 Rails 框架。我已经看到了整个 Angular 应用程序位于 assets/javascript 文件夹下的教程。

我想知道是否可以将其完全放在我的 rails 目录之外,而不是放在 assets/javascript 文件夹中。这样一来,我就有可能将后端和前端完全分开。 (这是推荐的吗?)。

我相信资产管道也预编译了很多资产。如果我要分离出 angularjs 资产,我是否需要以某种方式预编译资产?

谢谢

【问题讨论】:

    标签: ruby-on-rails angularjs


    【解决方案1】:

    我一直在研究一组类似的问题。有一些很好的工具可以让您将 AngularJS 直接集成到您的 rails 资产管道中,如果您只需要一点 Angular,它们对我来说看起来不错。

    但是,如果您想要一个完整的 Angular 前端,也就是单页 Web 应用程序,我认为您最终会受到兼容性和一些工具的限制。我觉得 Rails gem 跟不上 Angular,所以你会遇到版本冲突。我还看到越来越多的 Angular 独立工具,我非常喜欢 ng-boilerplate 项目模板。我也喜欢很多测试工具,例如 karma,但我还没有真正找到将 karma 与 rails 集成的方法。

    因此,我最终决定将两者分开。最初,我通过创建一个 Rails 应用程序和一个单独的 Angular 应用程序(单独的目录)来做到这一点。我使用 ng-boilerplate 作为角端的框架。我写了一个tutorial on that。这最终有点令人沮丧,我写了some more thoughts on it,主要的烦恼是我有两个 git 存储库,让它们保持同步很烦人。跨两个目录使用 IDE 也有点烦人。我最终将 rails 和 angular 转移到同一个文件夹中,它们似乎玩得很好,因为它们在该项目中使用不同的目录。

    在当前的结构中,我使用 ng-boilerplate 附带的 grunt 设置来压缩所有代码、打包它并运行 karma 单元测试。我还没有完成端到端测试,但它在我的清单上。我发现这是一个相对高效的工作环境。我为我的页面、控制器和业力测试用例选择的结构有一些重复的代码(我选择不考虑它以保持可读性)。我计划扩展 rails 脚手架生成器来为我创建 javascript 框架 - 所以当我创建一个 person rails 脚手架时,它也会为我创建一个 person angularjs 脚手架。如果我做这项工作,我会在这里更新。

    编辑:我也完成了脚手架工作,它允许 rails 在生成 rails 模型/控制器等时自动生成 angularJS 元素。博客文章在这里:http://technpol.wordpress.com/2013/09/24/rails-generator-to-generate-angular-views/

    【讨论】:

      【解决方案2】:

      您可以使用基于 grunt 的工作流程:

      如果你从一个解耦的前端开始,首先使用模拟,这样你就可以保持在角度范围内,而不会失去在后端和前端逻辑之间切换的焦点。构建单页应用程序的一个优点是您可以独立于后端 api 来开发它。有关模拟 http 响应的信息,请参阅 (http://docs.angularjs.org/api/ngMockE2E.$httpBackend)。

      【讨论】:

      • 啊,这看起来很有趣。所以据我了解,如果我将 angularjs 添加到 assets/javascript 应用程序中,我不需要预编译 angularjs 应用程序。如果我使用 grunt 工作流程,我将不得不在部署之前重新编译 angularjs;对吗?
      • 哦,一旦我使用 grunt 构建了应用程序,它应该放在 railsapp/public 目录下吗?
      【解决方案3】:

      我们一直在我们的 Rails 应用程序中使用 AngularJS,我们一直在使用 Rails ERB 模板,但在需要时切换到使用 ng 指令。

      对于上述设置,我们使用了 bower/bower-rails gem,这让我们可以使用 bower 来管理 angular 包及其依赖项。我们将其提交到我们的 repo 中,在 javascripts 目录中,并由 Rails 资产管道处理。

      考虑到我们在 ERB 模板和 Angularjs 之间的视图分割率超过 50-50%,这种设置对我们来说效果很好。

      有关此设置的更多信息,请访问以下链接:

      【讨论】:

        【解决方案4】:

        将 api 服务(在本例中为 rails)和前端组件分开有很多优点。正如我们对 ios/android 应用程序所做的那样,Angular 客户端可以作为一个单独的实体独立存在。它将是一个静态网站,可以部署在 s3 或任何静态网站主机上。它只需要与您的 api 服务进行通信。您可以设置 CORS 以使其成为可能。

        此工作流程的一些优点

        • 您可以使用rails-api,它是rails 应用程序的一个子集。如果您只是打算使用 rails 来构建 api,那么拥有完整的 rails 应用程序提供的所有功能是没有意义的。与 MVC 架构相比,它轻量级、速度更快且更倾向于构建 API 优先架构。
        • 您可以使用 yeoman angular-generator 生成 Angular 应用程序,并充分利用 grunt & bower 来管理构建(concat、uglify、cdnify 等)和依赖项(角度模块)。
        • 部署将变得灵活。您无需依赖一个来推动另一个。
        • 如果您计划更改后端堆栈(例如,使用 rails 来播放/狂欢),则无需担心客户端组件。
        • 通过拆分前端和 Rails 后端的开发,您可以将工作分配给两个开发团队,并保持整个应用程序的可扩展性。

        这种方法也有一个缺点。 通过将应用程序放在两个单独的存储库中,您无法轻松进行完整的集成测试。因此,您将不得不单独测试这些应用程序。您可以模拟您的 api 来测试 Angular 应用程序。

        我们一直在使用这种方法,并且会向其他人推荐相同的方法。 更少的依赖和更高的生产力。

        【讨论】:

          猜你喜欢
          • 2014-08-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-29
          • 2016-02-04
          • 1970-01-01
          相关资源
          最近更新 更多