2012-02-17 1 views
2

Есть ли способ сделать файл rev cache busting в SASS? Похоже, что здесь можно использовать компас за этот ответ: SASS Image CSS Cache Busting (via Compass)sass cache busting

но я не нашел способа сделать это, просто используя SASS. Есть ли способ получить SASS информацию об изменении файла из файловой системы и добавить к пути к изображению?

И я бы предпочел не добавлять строки запроса - скорее, я считаю, что это лучшая методология.

+0

похоже, что это действительно возможно, определяя пользовательскую функцию sass: http://www.seancolombo.com/2010/07/28/how-to-make-and-use-a-custom-sass-function/но я вообще не знаком с Ruby. Я бы предпочел не указывать пользовательскую функцию через командную строку и вместо этого продолжать использовать команду SASS watch. – elleeott

+0

Вы правы, избегая строк запроса - их можно игнорировать (http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/). Если вы используете рубин и предположительно рельсы, используете ли вы v3? Конвейер ресурсов Rails делает все для вас, если не тогда, то могут быть полезны звездочки. Когда вы помещаете ссылку на изображение, вы используете image-url(), а не url(), поэтому путь вычисляется – Dawn

ответ

1

Спасибо за рассвет за это время! С тех пор я понял это, но забыл, что я написал здесь об этом.

У меня есть пользовательский Р.Б. файл, который я ссылаться, когда я бег дерзости через командную строку - как так:

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

в file_mod.rb, у меня есть следующая рубиновая функция, которая делает трюк:

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. Должна быть легко изменена в соответствии с другими целями.

 Смежные вопросы

  • Нет связанных вопросов^_^