我有一个基本布局文件,在大多数视图中使用。在基本布局中,我需要一个使用grails资源插件的模块。
<r:require module="core"/>
模块在conf / ApplicationResources.groovy文件中定义为
modules = {
core {
resource url: '/css/main.css'
resource url: 'js/application.js'
}
}
现在问题就在于此。我对main.css文件进行了更改并构建了应用程序。这种变化并不反映在浏览器中。它只会更新,如果我查看源,然后单击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文件。但我无法使用此解决方案,因为那是一个黑客攻击。
所以我的问题是,当我使用grails资源插件更改css文件时,有一种方法可以自动更新css文件。
资源插件
http://grails.org/plugin/resources
我使用的grails版本是2.2,资源插件版本是1.1.6。
答案 0 :(得分:0)
如果您使用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>
答案 1 :(得分:0)
实用方法(如果所有aproach都失败)可能是更改已更改的CSS文件的名称(例如let find_n l n ~f =
let rec loop l' n' acc =
if n' = 0 then acc else
match l' with
| [] -> failwith "Cannot find enough items"
| h::t ->
if f h then
loop t (n' - 1) (h::acc)
else
loop t n' acc
in
loop l n []
)。这样浏览器就无法识别文件并且肯定会尝试加载它。
另一方面:在bundle-bundle_core_head_vjfiduht.css
中,资源插件应该使用哈希值作为已传递资源的名称(假设您没有通过prod
将其关闭。