Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测SCSS文件或其中任何部分文件是否已更新_Css_Ruby_Sass_Fileupdate - Fatal编程技术网

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

如何检测SCSS文件或其中任何部分文件是否已更新,css,ruby,sass,fileupdate,Css,Ruby,Sass,Fileupdate,我想在Ruby脚本中运行sass。编译scss文件可以通过以下操作完成: require "sass" Sass::Engine.new(File.read(scss), options).render 将一些适当的散列分配给选项,但我只想在scss或其任何部分(导入的)文件更新时编译它 在选项中,我打开了sass缓存。缓存将相关文件的所有更新信息保留在某个目录中。我认为,通过采取以下措施: engine = Sass::Engine.new(File.read(scss), options)

我想在Ruby脚本中运行sass。编译scss文件可以通过以下操作完成:

require "sass"
Sass::Engine.new(File.read(scss), options).render
将一些适当的散列分配给
选项
,但我只想在
scss
或其任何部分(导入的)文件更新时编译它

选项中
,我打开了sass缓存。缓存将相关文件的所有更新信息保留在某个目录中。我认为,通过采取以下措施:

engine = Sass::Engine.new(File.read(scss), options)
engine
中必须有可用的信息,通过这些信息我可以判断
scss
或其任何部分文件是否已更新。只有在这种情况下,我才应该运行:

engine.render
进行编译。如何基于sass缓存检测文件更新?

您可以使用:

Sass::Engine.for_file(scss, options).render
这将检查
scss
文件哈希的缓存目录中是否有缓存的解析树。请参阅
Sass::Engine的文档。有关\u文件,请参见此处:

缓存查找在
Sass::Engine#_to_树
方法中执行,此处提供的源代码:

编辑

Sass::Engine#u to_树的前几行

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

如果您只想在更改
scs
文件时编译它们,您可以查看类似的内容。我不想将其作为deamon运行。正如我在问题中所写的那样,我希望从Ruby代码中执行此操作。正如您所知道的,如果您确实阅读了
Sass::Engine.for_file
,我在询问之前所做的,它只需调用
Sass::Engine.new(file.read(filename),options.merge(:filename=>filename))
,这与我在问题中所写的基本相同。在您的示例中,您没有传递
:filename
选项。如果您阅读
Sass::Engine#u to_树
源代码,它作为
呈现
的一部分调用,您可以看到缓存查找发生在哪里。我没有在
选项
中写入我的内容,但我在
选项
中指定了
文件名