2012-02-17 8 views
2

SASSでファイル・リビット・キャッシュ・バスト処理を行う方法はありますか?この解答でコンパスを使用することは可能です: SASS Image CSS Cache Busting (via Compass)キャッシュ・バスト処理

しかし、私はSASSを使ってこれを行う方法はありませんでした。 SASSにファイル変更情報をファイルシステムから取得させ、イメージパスに追加する方法はありますか?

私はクエリ文字列を追加しない方がよいでしょう。これはより良い方法論だと思います。

+0

カスタムサス機能を定義することによって、これが本当に可能なように見えます。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のアセットパイプラインはすべてそれを行います。そうでなければスプロケットが役立つかもしれません。イメージ参照を置くと、url()ではなくimage-url()を使用してパスが計算されます – Dawn

答えて

1

この時間の後にキミをするための洞窟!私はこれを考え出したが、私はそれについてここに投稿して忘れてしまった。

私は、コマンドラインを介してSASSを実行したときに、私が参照するカスタムRBファイルを持っている - そうのように:

:file_mod.rbで

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

、私はトリックを行い、次のルビー機能を持っています

@mixin backgroundImage($path, $position:0 0, $repeat:no-repeat) { 
background: { 
    image:file_url($staticFilePath,$staticHost,$path); 
    position:$position; 
    repeat:$repeat; 
} 
} 
0123:
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のミックスインでは、私は単にそれを、それは結果を構築するために必要なパラメータを渡し、file_url関数を参照します

私の場合、私はそれを使用してCSSの背景画像パスを構築しています。他の目的に合わせて簡単に修正する必要があります。

関連する問題