【问题标题】:How to combine play framework and angular2?如何结合play框架和angular2?
【发布时间】:2016-11-18 16:40:02
【问题描述】:

我的问题是关于如何在项目中将正面和背面组织在一起。 据我所知,有两种方法可以做到这一点

  1. 使用 web-jars 依赖项和 sbt 插件将前端和后端组合到一个项目中。因此 sbt 将运行所有必要的操作,例如 uglifyconcatcompilationtypescriptjavascript)...
  2. 前后分开,分别部署。在这种情况下,后端必须添加标头Access-Control-Allow-Origin。这样,前端和后端可以部署在 2 个不同的主机中。使用的工具是 npm 和 gulp/grunt
  3. 1 和 2 的混合。仍然使用相同的存储库作为前端和后端,但前端是由 npm、bower 和 gulp/grunt 等外部工具构建和生成的

目前,选项 2 和 3 的文档并不多。此外,typescript 插件还没有准备好。

scala play + angular2 开发哪种方式更好?

【问题讨论】:

  • 我的赢家不是。 1 - 这样你就可以减少对其他框架专家的要求,即使你想在多域堆栈和/或单独的应用程序中工作,你也可以使用一些解决方案,比如一些轻型 HTTP 服务器来进行反向代理/多域/负载平衡.. . 你的问题是基于意见的,所以我的回答也可能只是意见:)
  • 谢谢,但你知道一些使用 Angular 2 和打字稿的教程吗?我在github上看到了一些项目,但目前似乎还不成熟
  • 正如@biesior 提到的,这是固执己见,我不喜欢将它分成2 个应用程序,我讨厌代理设置的grunt/gulp 配置。 Play 处理所有爵士乐,还有一个优点是您不必配置任何 CORS 设置。我还做了什么:我不使用 webjars,而是使用 bower/npm,它们位于 /public 文件夹中。我为 Angular 定义了一个入口点,例如:'/welcome' 从那里在 Angular 上进行路由。你可能想看看这个question
  • @biesior:您有任何将 scala playframework 和 angular2 与 typescript 相结合的示例。我这里有一个例子 github.com/lashford/modern-web-template#master 但它是咖啡脚本!

标签: angularjs playframework typescript sbt devops


【解决方案1】:

我最近一直在使用几个 Angular 和 Angular 2 应用程序并处理了类似的问题。对于所有场景,我们的后端和前端应用程序在代码方面是分开的,并且仅通过 REST 接口进行通信。尽管如此,我们同时提供前端和后端部分,并且为两者使用一个托管服务器(可以是 Play Framework 或 Tomcat)感觉很自然。

选项 #1 一开始,我们选择了这个。 Webjars 看起来像一个奇迹,几个 sbtmaven 插件可以帮助您完成前端项目的缩小、编译、linting 等。 这对某些人来说可能会很顺利。不幸的是,我发现这个工作流程不自然。一些插件丢失或配置困难。 Webjars 并不总是最新的,其中一些是自动可用的,有些不是......等等。在一个简单的项目中它可能工作,但对我来说,这还不够。

选项 #2 我们已经尝试过单独的服务器进行开发,但我们很快就退出了。对于大多数操作,您仍然需要前端和后端服务器。所以你必须同时开始。这意味着您有 2 倍以上的命令或工作流程来记住和教导他人。 CORS 不是一个大问题,但您可能会考虑在生产中禁用它,这意味着项目中需要额外的工作。以这种方式单独开发后端或前端会更快,但我认为,如果您要同时提供两者 - 您的开发过程应该可以帮助您。

选项 #3 那就是我们正在使用的那个。使用 sbt 是可能且方便的。 SbtWeb 插件允许您将playRunHooks 设置为您希望在项目中运行的任何操作。这个想法是运行一个 JavaScript 构建工具,它将完成所有必要的前端工作,fe:

playRunHooks += {
  Process(Seq("npm", "install"), file(portal)).lines.foreach(println)
  RunSubProcess(portal, "npm", "run", "watch")
}

RunSubProcess 可以找到here

因此,长话短说,您让 Play Server 为您的静态内容提供服务,但忽略其变化。这由npmgulpwebpackgrunt 负责——无论您选择什么。有很多 JavaScript 构建工具、插件和模板可以帮助您。您不需要任何 sbt 插件,只需让 JavaScript 世界完成它的工作。一开始可能很难设置,但很快就会得到回报。

作为示例项目,您可能需要查看 Activator 模板 Play Framework with Angular 2 and Webpack 2,它的项目托管在 GitHub 上:play-ng2-webpack2。它帮助了我一点。

现在也可以使用带有xsbt-web-plugin 和 developmentMode 的 Tomcat。哲学是相似的。

希望你能找到自己的方式:)。

【讨论】:

  • 是否有计划将选项 #3 作为 sbt 插件发布?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多