2017-09-12 1 views
0

J'ai un fichier de mise en page de base qui est utilisé dans la plupart des vues. Dans la mise en page de base, j'ai besoin d'un module utilisant le plugin de ressources grails.Comment forcer le navigateur à ne pas mettre en cache le fichier css lorsque le fichier css change?

<r:require module="core"/> 

Les modules sont définis dans le fichier conf/ApplicationResources.groovy comme

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

est le problème maintenant ici. Je fais le changement au fichier main.css et construis l'application. Le changement ne reflète pas dans le navigateur. Il ne sera mis à jour que si je visualise la source, puis cliquera sur le fichier css, puis j'actualiserai ce fichier css. Le navigateur met en cache le fichier css. J'ai essayé d'ajouter la version au code ci-dessus comme

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

mais cela ne fonctionne pas non plus. Quand je regarde la balise de lien css généré, je vois que le fichier css est

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

Il est donc logique que la version ne fonctionne pas. J'ai essayé en dernier recours

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

et le fichier css a été finalement mis à jour. Mais je ne peux pas utiliser cette solution puisque c'était un hack. Donc, ma question est de savoir s'il existe un moyen pour le fichier css de se mettre à jour automatiquement lorsque j'apporterai une modification au fichier css en utilisant le plugin resources grails.

Ressources Plugin

http://grails.org/plugin/resources

La version Grails J'utilise est 2.2 et les ressources version plug-in est 1.1.6.

Répondre

0

Si vous utilisez un serveur Web Apache, vous pouvez utiliser un fichier .htaccess. En spécifiant le fichier concerné, il ne sera pas mis en cache.

<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> 
+0

J'utilise tomcat.. – kofhearts

0

Une approche pragmatique (si tous aproaches ne) pourrait être de changer le nom des fichiers CSS qui ont changé (par exemple bundle-bundle_core_head_vjfiduht.css). De cette façon, le navigateur ne reconnaît pas le fichier et essaie vraiment de le charger.

D'autre part: dans prod le plugin ressources devrait utiliser une valeur de hachage pour le nom des ressources fournies (étant donné que vous n'avez pas activé hors tension via grails.resources.mappers.hashandcache.enabled = false