0

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

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

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

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

我可能应该补充一点,我正在使用 Grunt 来完成所有这些工作。

4

1 回答 1

2

Compass 已经在生成的精灵表中添加了一个哈希作为缓存破坏器(例如icons-sf6a3361a01.png)。

对于其他图像,您可以config.rb文档中使用以下代码:

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

于 2013-08-13T00:37:43.347 回答