私は現在Play Framework 2.3.0とAngularJSを使ってWebアプリを開発しています。 /public
私のAngularJSアプリを提供するPlay Frameworkのフォルダ。
私が開発中に行ったすべての変更はPlayによる完全なリロードを引き起こします、それは私が時間のかかる計算をしているのでちょっと面倒です。 Global.beforeStart
方法。
なぜ、それはなぜ自動リロードを引き起こすのですか。 Play 2.3.0のドキュメント 言う:
に格納されているリソース
public
ディレクトリは静的アセットです。 Webサーバーによって直接提供されます。
自動リロード機能を無効にする方法に関するアイデア public
フォルダ?
編集:もう一つの考え:外部フォルダからリソースを提供する方法はあります。 Assets
コントローラ?
回答:
回答№1は0私は私のbuild.sbtに以下を追加しました:
watchSources := (watchSources.value
--- baseDirectory.value / "public" ** "*").get
監視されているフォルダの一覧から "/ public"が削除されます。これが問題を起こすかもしれないことに注意してください、しかし問題が解決されるまでそれは素晴らしい回避策です。
回答№2の場合は3
再読み込みは ない 引き起こされた ソース ファイルの変更、それらはによって引き起こされます クラスパス 変更します。もちろん、ソースファイルの変更はクラスパスの変更を引き起こすかもしれませんが、そうではないかもしれません。
Playのランモードは、すべての人に注目する方法です。ソースファイルの変更。これにはパブリックディレクトリおよびアセットへの変更も含まれます。これらに対して処理が必要になる可能性があるためです。変更があるたびに、sbtに再コンパイルを要求します - これは静的なアセットとscala / javaファイルを含むすべてのものを再コンパイルすることを意味します。
sbtは再コンパイル時にインクリメンタルを使用しますコンパイル - つまり、最後のコンパイルの結果を保存し、最後のコンパイル以降に新しい作業が必要かどうかを調べます。ない場合は、コンパイルをスキップします。
リソースディレクトリからクラスパスにリソースをコピーする場合も同様です。
Playがsbtに再コンパイルを依頼した後、それはそれからチェック - クラスパスに変更はありましたか?あれば、リロードします。しかし、変更したのがJavaScriptファイルだけであれば、そうではありませんでした。
しかし、あなたは「変化する唯一の人ではないfiles - SBTが自分用のファイル、おそらくJava / Scalaソースファイル、あるいはconfディレクトリ内のリソースのいずれかを生成するように設定されている場合、これを実行する必要があるかどうかにかかわらずかどうか - まあこれはクラスパスの変更かもしれません。
それで、あなたの問題を解決するために、どんなタスクでもチェックしてくださいそれらがソースやリソースを生成しているかどうかを確認するために、あなたは「書いた、またはあなたが使っているプラグイン」を使います。もしそうであり、それについて頭が良くない、すなわち必要としないときに同じファイルを再生成するのであれば、ソースファイルが変更されるたびにPlayが再ロードすることになりますsbtが再コンパイルされると、ファイルが再生成され、クラスパスが変更されます。
回答№3の場合は0
たぶんあなたは(または)BuildInfoPluginを使用していましたか? (あるいは、この質問を見つけた人は使ってください)
私が何かに触れたときはいつでも、Play Frameworkはいつも私のために再開していました public/
。結局、私はSBT BuildInfoPluginを使っているからだと気づいた https://github.com/sbt/sbt-buildinfoそして、それがビルドタイムスタンプを含むように設定していた git status
生成されたビルド情報内。ビルド情報のこれらの部分を削除した後、Playは変更後に再コンパイルまたは再ロードしなくなりました。 public/
.
これはSBT 0.13.15とSBT 1.1.1、そしてPlay Framework 2.6.9と2.6.12にあります。
これは私が削除したものです:
buildInfoOptions += BuildInfoOption.BuildTime
そして:
BuildInfoKey.action("gitStatus") { "git status".!!.trim })
.
(設定する必要はありませんでした watchSources
または playMonitoredFiles
Recopmiling&reloadingを停止するPlayの場合)