私は最近いくつかのAngular and Angular 2アプリを使っていて、同様の問題を扱っています。すべてのシナリオで、私たちのバックエンドとフロントエンドのアプリケーションはコードの点で分離されていて、RESTインターフェイスを介してのみ通信していました。それでも、フロントエンドとバックエンドの両方の部分を提供しています。両方とも(Play FrameworkでもTomcatでも可能な)1つのホスティングサーバーを使用するのは当然です。
オプション#1 当初、私たちはこれを選択しました。 Webjarsは奇跡のように見え、いくつかのsbt
またはmaven
プラグインは、フロントエンドプロジェクトの縮小、コンパイル、リンピングなどを手助けすることができます。 これはいくつかのためにうまくいくかもしれません。残念ながら、私はこのワークフローが不自然であることを発見しました。プラグインの中には欠けているものや、設定が難しいものがありました。 Webjarsは常に最新のものではなく、自動的に利用可能なものもあれば、そうでないものもあります。単純なプロジェクトではうまくいくかもしれませんが、私にとっては十分ではありませんでした。
オプション#2 私たちは開発用に別々のサーバーを試しましたが、速く終了しました。ほとんどのアクションでは、フロントエンドサーバーとバックエンドサーバーの両方が必要です。だから両方を始める必要があります。これは、他のユーザーを覚えて教えるために2倍以上のコマンドやワークフローがあることを意味します。 CORSは大きな問題ではありませんが、プロダクション用に無効にすることを検討することもできます。これはプロジェクトで余分な作業を意味します。バックエンドやフロントエンドを別々に開発することは、このように高速でしたが、私の意見では、両方を提供する場合は、開発プロセスが役立つはずです。
オプション#3 これは私たちが使用しているものです。 sbtでそれは可能で便利です。 SbtWeb
プラグインを使用すると、playRunHooks
にプロジェクトで実行するアクションを設定できます。 RunSubProcessがhere見つけることができます
playRunHooks += {
Process(Seq("npm", "install"), file(portal)).lines.foreach(println)
RunSubProcess(portal, "npm", "run", "watch")
}
:アイデアは、すべての必要な、フロントエンドの仕事をするためのツール、FEを構築JavaScriptを実行することです。
だから、長い話を短くカット、あなたは、静的なコンテンツを提供するが、その変化を無視するようにサーバーを再生してみましょう。これはnpm
,gulp
,webpack
,grunt
のいずれかを選択して処理します。 JavaScriptビルドツール、プラグイン、テンプレートが豊富に用意されています。 sbt
プラグインは必要ありません.JavaScriptの世界がその仕事をすることを許可するだけです。最初に設定するのは難しいかもしれませんが、すぐに払います。
サンプルプロジェクトとして、アクティベータテンプレートPlay Framework with Angular 2 and Webpack 2をチェックアウトすることができ、プロジェクトはGitHub:play-ng2-webpack2でホストされています。それは私を少し助けました。
xsbt-web-pluginとdevelopmentModeでTomcatを使用することもできます。哲学は似ています。
あなたがあなたの方法を見つけることを望む:)。
私の当選者はノーです。 1 - マルチドメインのスタックやアプリケーションを分離したい場合でも、リバースプロキシ/マルチドメイン/ロードバランスのための軽いHTTPサーバーのようないくつかのソリューションを使用することができます。あなたの質問は意見に基づいているので、私の答えは意見だけかもしれません:) – biesior
ありがとうございますが、あなたは角2とタイプスクリプトでそれを行うためのチュートリアルを知っていますか?私はgithubに関するいくつかのプロジェクトを見たが、今のところ未熟だと思う。 – nam
@biesiorが言及したように、私は1つの理由として、2つのアプリケーションに分割したくないと主張している。 Playはそのジャズをすべて処理しますが、CORS設定を構成する必要がないという利点もあります。私もやったこと:私はwebjarsを使用せず、bower/npmは/ publicフォルダにあります。私はangleのエントリーポイントを定義しています。例えば、 '/ welcome'はそこからangleがルーティングを取ります。あなたはこの[質問](http://stackoverflow.com/questions/16085544/play-framework-2-1-angularjs-routing-best-solution)を見てみたいかもしれません –