我的问题是关于如何在项目中组织正面和背面。 据我所知,有两种方法可以做这样的事情
uglify
,concat
,compilation
(typescript
到javascript
)... Access-Control-Allow-Origin
。这样,正面和背面可以部署在2个不同的主机中。要使用的工具是npm和gulp / grunt 目前,选项2和3没有很多文档。typescript
插件还没有准备就绪。
哪种方式更适合scala play + angular2开发?
答案 0 :(得分:9)
我最近一直在使用几个Angular和Angular 2应用程序并处理类似的问题。对于所有场景,我们的后端和前端应用程序在代码方面是分开的,并且仅通过REST接口进行通信。尽管如此,我们提供了前端和后端部分,并且使用一个托管服务器(可以是Play Framework或Tomcat)也很自然。
选项#1
一开始,我们选择了这个。 Webjars看起来像一个奇迹,几个sbt
或maven
插件可以帮助您进行前端项目的缩小,编译,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为您的静态内容提供服务,但忽略其变化。这由npm
,gulp
,webpack
,grunt
处理 - 无论您选择什么。有很多JavaScript构建工具,插件和模板可以帮助您。您不需要任何sbt
插件,只需允许JavaScript世界完成其工作。一开始可能很难设置,但很快得到回报。
作为示例项目,您可能需要查看Activator模板Play Framework with Angular 2 and Webpack 2,并且它的项目托管在GitHub上:play-ng2-webpack2。它帮了我一点。
现在也可以使用Tomcat,xsbt-web-plugin和developmentMode。哲学是相似的。
希望你找到自己的方式:)。