硬盘缓存破坏资产与指南针

时间:2013-08-12 22:28:52

标签: compass-sass gruntjs

我想用Compass进行硬缓存破坏,即使用哈希后缀资产。

Compass目前通过在查询字符串中添加?v参数来使用软缓存清理,但这显然不受每个cdn服务的支持,因此我想避免这种情况并直接编码文件哈希文件名(myfile-2q7de.png)。

有可能吗?我目前的方法是复制我的所有资产,将它们全部哈希,然后编写一个映射文件,并在最小的Sass扩展中使用它来从它的非散列路径获取真正的文件路径。除了spritesheets之外,它的效果很好:它使得Compass将哈希添加到精灵类名中,这使得它们无法使用:

.sprite-myfile-2q7de {
    ...
}

我应该补充一点,我正在使用Grunt做这一切。

1 个答案:

答案 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服务器提供良好的映像。