我想从 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 缓存的文件更新?
您可以使用:
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