我想用Compass进行硬缓存破坏,即使用哈希后缀资产。
Compass目前通过在查询字符串中添加?v
参数来使用软缓存清理,但这显然不受每个cdn服务的支持,因此我想避免这种情况并直接编码文件哈希文件名(myfile-2q7de.png
)。
有可能吗?我目前的方法是复制我的所有资产,将它们全部哈希,然后编写一个映射文件,并在最小的Sass扩展中使用它来从它的非散列路径获取真正的文件路径。除了spritesheets之外,它的效果很好:它使得Compass将哈希添加到精灵类名中,这使得它们无法使用:
.sprite-myfile-2q7de {
...
}
我应该补充一点,我正在使用Grunt做这一切。
答案 0 :(得分:2)
Compass已经在生成的精灵表中添加了一个哈希作为缓存破坏者(例如icons-sf6a3361a01.png
)。
对于其他图片,您可以在config.rb
中使用以下代码,该代码位于documentation:
asset_cache_buster do |path, real_path|
if File.exists?(real_path)
pathname = Pathname.new(path)
modified_time = File.mtime(real_path).strftime("%s")
new_path = "%s/%s-%s%s" % [pathname.dirname, pathname.basename(pathname.extname), modified_time, pathname.extname]
{:path => new_path, :query => nil}
end
end
因此,SCSS代码
.icon-cloud {
background: image-url("weather-cloud.png") no-repeat 0 0;
}
生成带有嵌入式缓存块(weather-cloud-1365271586.png
)的图像:
.icon-cloud {
background: url('../img/weather-cloud-1365271586.png') no-repeat 0 0;
}
警告:指南针不会复制或重命名图像。您必须创建一个重写规则,允许您的Web服务器提供良好的映像。