0

我有一个在大多数视图中使用的基本布局文件。在基本布局中,我需要一个使用 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文件。但我不能使用这个解决方案,因为那是一个 hack。

所以我的问题是,当我在使用 grails 资源插件时对 css 文件进行更改时,是否有办法让 css 文件自动更新。

资源插件

http://grails.org/plugin/resources

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

4

2 回答 2

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>
于 2017-09-12T09:52:20.063 回答
0

一种实用的方法(如果所有方法都失败)可能是更改已更改的 CSS 文件的名称(例如bundle-bundle_core_head_vjfiduht.css)。这样浏览器就无法识别该文件,并且肯定会尝试加载它。

另一方面:在prod资源插件中应该使用哈希值作为交付资源的名称(假设你没有通过grails.resources.mappers.hashandcache.enabled = false.

于 2017-09-14T08:44:25.210 回答