はじめに
ブラウザには標準で静的ファイル(javascriptやcss)のキャッシュ機能が付いていますが、
本番環境にソースを挙げてもそのままでは変更が反映されないため、
クエリー文字列を付加(version管理)することでキャッシュコントロールをしていました。
例
<script src="./jquery.js?v=xxxxx"></script>
Play Frameworkでは?
いちいちVersion管理するのは面倒ですし、日付にするとキャッシュが効かなくなってしまいます。
ですので、Play Frameworkではsbt-digestを使います。
##環境
Play Framework 2.5.10
##対応策
project/plugins.sbt
に以下を追加
plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1")
build.sbt
に以下を追加
build.sbt
lazy val root = (project in file(".")).enablePlugins(SbtWeb)
pipelineStages := Seq(digest)
conf/routes
に以下があることを確認
GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset)
Htmlのスクリプトタグの書き方を以下のように変える
html
<script src="@routes.Assets.versioned("js/jquery.js")" ></script>
出力結果
結果
<script src="/assets/js/cbfb54849f63656a2ce73815cdc8a005-jquery.js"></script>
##開発環境でも確認したい
もしも開発環境で確認をしたいのであれば、build.sbt
に以下を追加すればローカルでも同じようになります。
build.sbt
pipelineStages in Assets := Seq(digest)