sass缓存破坏

时间:2012-02-17 22:52:38

标签: css ruby caching sass

有没有办法在SASS中执行文件rev缓存清除?这里的答案似乎可以使用罗盘: SASS Image CSS Cache Busting (via Compass)

但我还没有找到任何方法只使用SASS。有没有办法让SASS从文件系统获取文件修改信息,并附加到图像路径?

我宁愿不附加查询字符串 - 相反,我认为这是一种更好的方法。

1 个答案:

答案 0 :(得分:1)

谢谢Dawn在这段时间之后一直在玩!我已经想到了这一点,但忘了我在这里发布了它。

我有一个自定义的rb文件,当我通过命令行运行sass时我会引用它 - 就像这样:

sass --update sass:css -r file_mod.rb

在file_mod.rb中,我有以下ruby函数可以解决这个问题:

require 'sass'

module GETMODINT
def file_url(staticFilePath,staticHost,filePath)
    assert_type filePath, :String
    filePath = filePath.value #get string value of literal
    staticFilePath = staticFilePath.value 
    staticHost = staticHost.value 
    modtime = File.mtime(filePath).to_i
    #Sass::Script::Number.new(modtime)

    fileBaseName = File.basename filePath, '.*'
    fileDir = File.dirname(filePath).sub(staticFilePath,'')
    fileExt = File.extname(filePath)
    path = "url('#{staticHost}#{fileDir}/#{fileBaseName}.#{modtime}#{fileExt}')"
    return Sass::Script::String.new(path)
end
Sass::Script::Functions.declare :modInt, [:filePath]
end

module Sass::Script::Functions
    include GETMODINT
end

然后,在sass mixin中,我只是引用file_url函数,向它传递构建结果所需的参数:

@mixin backgroundImage($path, $position:0 0, $repeat:no-repeat) {
background: {
    image:file_url($staticFilePath,$staticHost,$path);
    position:$position;
    repeat:$repeat;
}   
} 

在我的情况下,我用它来构建一个css背景图像路径。应该很容易修改以适应其他目的。