2012-02-07 19 views
14

Compass usa chunky_png para representar los sprites. Agrega un hash al final del archivo para obligar a las memorias caché a descargar los nuevos sprites de imágenes. ¿Hay alguna manera de desactivar esta memoria caché?¿Cómo eliminar el hash de los archivos de imagen de sprite generados por Compass?

+0

El hash sprite no es para el almacenamiento en caché del navegador (aunque tiene ese efecto), pero para que Compass pueda identificar el archivo generado. – sam

Respuesta

23

Desafortunadamente asset_cache_buster :none opción no desactiva añadiendo el hash al final del nombre de archivo.

Como escribí hace un tiempo (en francés), Compass no tiene manera de deshabilitar el caché hash buster, pero propongo a solution.
En el archivo de configuración (por ejemplo config.rb) añadir las siguientes líneas:

# Make a copy of sprites with a name that has no uniqueness of the hash. 
on_sprite_saved do |filename| 
    if File.exists?(filename) 
    FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, '.png') 
    end 
end 

# Replace in stylesheets generated references to sprites 
# by their counterparts without the hash uniqueness. 
on_stylesheet_saved do |filename| 
    if File.exists?(filename) 
    css = File.read filename 
    File.open(filename, 'w+') do |f| 
     f << css.gsub(%r{-s[a-z0-9]{10}\.png}, '.png') 
    end 
    end 
end 

Ahora, usos compass clean para eliminar los archivos generados y se reinicia una compilación con compass compile.
Obtiene, por ejemplo, un archivo images/icons-scb1e5456d5.pngy un archivo images/icons.png. En las hojas de estilo, todas las referencias a los sprites ahora apuntan a la versión sin hash.

Asegúrese de que el archivo tenga un hash proporcionado para optimizar los tiempos de compilación por Compass.

+0

Gracias por esto, yo personalmente elegí usar FileUtils.mv en lugar de FileUtils.cp para que el archivo de retención no cuelgue alrededor de – isNaN1247

+1

El uso de esto con grunt-contrib-sass no parece desencadenar el bloque on_stylesheet_saved, dejando las propiedades de fondo css haciendo referencia al archivo con el hash en lugar de uno sin relieve. Sin embargo, usarlo con grunt-contrib-compass lo activó. – yuvilio

+1

@yuvilio este gancho es proporcionado por Compass y no existe en Sass. Thx para el recordatorio! – piouPiouM

22

Conjunto asset_cache_buster :none en su config.rb como documented in their configuration reference

+1

esto necesita más votos positivos –

+3

Debe ser la respuesta aceptada. –

+4

Esta solución no evita que Compass coloque hash como postfijo en el nombre del archivo sprite, lo que es un problema en una determinada pregunta. – s3m3n

1

No he probado con sprites, pero esto funciona con replace-text-with-dimensions, por ejemplo:

config.rb:

# disable asset cache buster 
asset_cache_buster do |http_path, real_path| 
    nil 
end 

encontrado en The compass configuration file at caring.com

4

solución mejor se puede encontrar en otro similar question.

Es mejor porque:

  1. script cambia nombre antes de sprites generación - no después.
  2. Debido al punto 1. no es necesario cambiar apenas .css archivo generado automáticamente. Se genera con el nombre correcto desde el principio.
  3. La solución aceptada hace cp (copia) de sprite generado con hash y se queda en el sistema de archivos/repositorio como duplicado, lo que es bastante malo. Además, aún se ve como cambiado con el repositorio local, por lo que se comprometen dos archivos idénticos. La solución podría hacer mv para cambiar el nombre de archivo hash generado para borrar uno, pero en este caso se generaría sprite cada vez que lo use en el archivo .scss, por lo que es aún peor.
Cuestiones relacionadas