scala - 为什么 Play 框架不重新加载资源?

标签 scala playframework

我在开发模式下启动了我的 play 应用程序,并尝试更改索引 html 文件,但 play 没有更新它。 我的应用程序仅包含公共(public)文件夹中的 Assets ,为了查看更改,我必须重新启动我的应用程序。我的观察表明,play 会编译 target/web/public/main 目录中的资源,并且当 public 目录中的文件更改时不会更新它

我应该如何配置我的应用程序,以便在更改它时重新加载所有资源?

最佳答案

某些浏览器会将资源缓存在您的公共(public)文件夹中,因此当 Play 服务器提供新内容时,您仍然会看到旧内容。如果您使用的是 Chrome,您可以通过执行硬重新加载 (Ctrl+Shift+R) 来清除缓存,这将强制它再次从服务器获取所有内容。

更好的解决方案是使用 Assets 指纹识别,您可以找到有关 here 的信息。 。这基本上意味着当 Assets 的内容发生变化时, Assets 的名称也会发生变化,因此您的浏览器会意识到它需要下载新文件而不是提供缓存的文件。要做到这一点非常简单 - 在你的路由文件中,更改

GET  /assets/*file        controllers.Assets.at(path="/public", file)

GET  /assets/*file  controllers.Assets.versioned(path="/public", file: Asset)

当您需要引用 Assets 时,不要使用 Assets.at,而是使用 Assets.versioned ie。

<link rel="stylesheet" href="@routes.Assets.at("stylesheets/main.css")">

变成了

<link rel="stylesheet" href="@routes.Assets.versioned("stylesheets/main.css")">

但是,正如 Kris 在评论中所说,如果您要使用 twirl 模板系统(您的索引页位于 app/views/index.scala.html 中,而不是将其作为公共(public)文件夹中的 Assets ),请 Play 进行任何更改后将重新编译您的模板并提供新页面。

关于scala - 为什么 Play 框架不重新加载资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32257111/

相关文章:

scala - 找不到Ensime Vim .ensime文件

Scala:返回对函数的引用

playframework - 数组的 JSON 组合器

java - 无法将现有 Java 项目添加到我的 Play Framework 的 build.sbt

mysql - 验证 Web 套接字中的 url 参数握手 - 玩 scala

linux - 如何编写Play Framework service shell让它在启动时开始运行

java - 如何随时取消异步计算?

java - Maven 解决方案可以有多语言项目吗? (Java、Python、Scala)

scala - Scala 中的更大循环

scala - 如何在 Play Framework 路由文件中使用导入和隐式?