2013-10-02 63 views
2

我想從Ruby腳本中運行sass。編譯SCSS文件scss可以通過執行來完成:如何檢測SCSS文件或其中的任何部分文件是否已更新

require "sass" 
Sass::Engine.new(File.read(scss), options).render 

與分配給options一些適當的哈希值,但我想編譯它只有scss或者更新它的任何部分(進口)的文件。

options之內,我開啓了sass緩存。緩存將相關文件的所有更新信息保存在某個目錄中。我覺得,做最多:

engine = Sass::Engine.new(File.read(scss), options) 

必須有engine資料由我可以告訴大家,如果scss或其任何部分文件被更新。只有在這種情況下,我才能運行:

engine.render 

要做編譯。如何檢測基於sass緩存的文件更新?

+1

如果你只是想編譯'scss'文件時,他們改變了,你可以看看像[看守薩斯](https://github.com/hawx/guard-sass)。 –

+0

我不想將它作爲一個deamon運行。我想從Ruby代碼中做到這一點,正如我在我的問題中所寫的那樣。 – sawa

回答

0

您可以使用:

Sass::Engine.for_file(scss, options).render 

這將檢查是否有針對scss文件哈希緩存目錄緩存解析樹。請參閱Sass::Engine.for_file的文檔:http://sass-lang.com/docs/yardoc/Sass/Engine.html

緩存查找在Sass::Engine#_to_tree方法中執行,源代碼可在此處獲得:https://github.com/nex3/sass/blob/stable/lib/sass/engine.rb

編輯

一是少數Sass::Engine#_to_tree行:

def _to_tree 
    if (@options[:cache] || @options[:read_cache]) && 
     @options[:filename] && @options[:importer] 
    key = sassc_key 
    sha = Digest::SHA1.hexdigest(@template) 

    if root = @options[:cache_store].retrieve(key, sha) 
     root.options = @options 
     return root 
    end 
    end 
    # ... 
end 
+0

正如你可以告訴你是否真的讀過'Sass :: Engine.for_file'的源代碼,我之前所做的只是調用'Sass :: Engine.new(File.read(filename),options。合併(:文件名=>文件名))',這與我在問題中寫的基本相同。 – sawa

+0

你沒有在你的例子中通過':filename'選項。如果您要閱讀'Sass :: Engine#_to_tree'源文件,它被稱爲'render'的一部分,您可以看到緩存查找的位置。 –

+0

我沒有寫在'options'中,但是我在'options'中指定了':filename'。 – sawa

相關問題