2

我想从 Ruby 脚本中运行 sass。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 缓存检测文件更新?

4

1 回答 1

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
于 2013-10-02T22:11:00.050 回答