昨日の続きですが、webjars-playを使ってWebJarsを使っている場合にどうやってCDNに切り替えるのがいいのかなぁと思って調べていたらJames Wardさんのブログで以下の記事を見つけました。
WebJars Now on the jsDelivr CDN | James Ward
まずはこんなコントローラを用意しておきます。
package controllers import play.api.mvc.Controller import play.api.Play import play.api.Play.current object StaticWebJarAssets extends Controller { def at(file: String) = Assets.at("/META-INF/resources/webjars", file) def getUrl(file: String) = { val maybeContentUrl = Play.configuration.getString("contentUrl") maybeContentUrl.map { contentUrl => contentUrl + controllers.routes.StaticWebJarAssets.at(file).url } getOrElse controllers.routes.StaticWebJarAssets.at(file).url } }
conf/routesのWebJarsのルーティングをこのコントローラを使うように修正します。
GET /webjars/*file controllers.StaticWebJarAssets.at(file)
続いてconf/application.confに以下の設定を追加します。
contentUrl="//cdn.jsdelivr.net"
あとはテンプレートで読み込むCSSファイルやJavaScriptファイルのパスを指定する際に以下のようにすればOKです。
<script type='text/javascript' src='@StaticWebJarAssets.getUrl(WebJarAssets.locate("jquery.min.js"))'>
WebJars標準でCDNに切り替えてくれる機能をサポートしてくれてもいい気がしますねー。