css - 如何强制浏览器在 css 文件更改时不缓存 css 文件?

标签 css grails grails-resources-plugin

我有一个用于大多数 View 的基本布局文件。在基本布局中,我需要一个使用 grails 资源插件的模块。

<r:require module="core"/>

模块在 conf/ApplicationResources.groovy 文件中定义为

modules = {
    core {
        resource url: '/css/main.css'
        resource url: 'js/application.js'
    }
}

问题来了。我更改了 main.css 文件并构建了应用程序。更改不会反射(reflect)在浏览器中。它只会在我查看源代码然后单击 css 文件然后刷新该 css 文件时更新。浏览器缓存 css 文件。我试过将版本附加到上面的代码中,比如

modules = {
    core {
        resource url: '/css/main.css?version=2'
        resource url: 'js/application.js'
    }
}

但这也行不通。当我查看生成的 css 链接标记时,我看到 css 文件是

<link href="/app/static/bundle-bundle_core_head.css" type="text/css" rel="stylesheet" media="screen, projection" />

所以版本不工作的原因是有道理的。我试过作为最后的手段

<link href="/app/static/bundle-bundle_core_head.css?version=2" type="text/css" rel="stylesheet" media="screen, projection" />

终于更新了css文件。但我不能使用这个解决方案,因为那是一个 hack。

所以我的问题是,当我在使用 grails 资源插件时更改 css 文件时,是否有一种方法可以让 css 文件自动更新。

资源插件

http://grails.org/plugin/resources

我使用的grails版本是2.2,资源插件版本是1.1.6。

最佳答案

如果您使用 Apache 网络服务器,则可以使用 .htaccess 文件。指定相关文件,它不会被缓存。

<Files main.css>
FileETag None
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</Files>

关于css - 如何强制浏览器在 css 文件更改时不缓存 css 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46173012/

相关文章:

css - 响应式网站在手机上以全宽显示(但在模拟手机上不显示)

javascript - CSS3 样式属性中的 boolean 值

html - 如何为移动设备设置此 mailchimp 表单的样式?

java - 我可以轻松地将 EJB3 Remote 与 RAD 框架结合使用吗?

javascript - 为什么我的 GSP 拉入我的 AngularJS javascript 文件但不执行我的 Controller 功能?

grails - r:img导致资源未定位

php - 如何在页面中间用 PHP 附加到 <head>?

json - 在评估子项及其属性的父项上执行createCriteria()

java - 在 Tomcat 中作为 WAR 运行的 Grails 项目中 Maven-build JAR 的 SLF4J 配置位置

grails - 将资源插件模块转换为 Assets 管道