如何检测 SCSS 文件或任何部分文件是否已更新



我想从 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

相关内容

  • 没有找到相关文章

最新更新