使用 guard 渲染一个相对的 haml
Render a relative haml using guard
我的文件结构如下所示:
Guardfile
resolution1/menu/page1.haml
resolution1/menu/some_partial.haml
resolution2/...
resolution3/...
现在,在 page1.haml 中,我有一条线可以在其中呈现部分 haml(我没有使用 Rails)
= Haml::Engine.new(File.read("./some_partial.haml")).render
它失败了:
Error: No such file or directory @ rb_sysopen - ./some_partial.haml
因为我的工作目录是 Guardfile 所在的目录。应该工作的解决方法是:
= Haml::Engine.new(File.read("#{__dir__}/some_partial.haml")).render
或者如果我感到绝望,即使这样(获取文件绝对路径)
= Haml::Engine.new(File.read("#{File.expand_path(File.dirname(__FILE__))}/some_partial.haml")).render
但是,这并没有像我希望的那样工作。
File.expand_path(File.dirname(__FILE__))
它没有给我文件的绝对路径(不考虑工作目录),而是给我工作目录的绝对路径。
当然,我可以设置可行的路径,但我不想在每次渲染中都包含我的目标分辨率。
我的Guardfile
guard :haml, output: '../package/www' do
watch(/^.+(\.haml)$/)
end
我正在使用 Windows,该死的我的生活。有什么建议么?我只需要从同一目录中的文件中获取文件。
这是由 Guard::Haml 处理模板的方式造成的。 It (currently) does this:
content = File.new(file).read
engine = ::Haml::Engine.new(content, (options[:haml_options] || {}))
它将模板读入一个字符串,然后将该字符串传递给 Haml。这意味着当 Haml 看到该字符串时,它无法知道它应该与哪个文件相关联。
Haml 有一个 :filename
option 允许您将文件名传递给 Haml。这允许 __FILE__
和 __dir__
正常工作,但 Guard::Haml 目前不使用它。
我创建了一个 pull request that adds this feature。如果你想在合并之前试用该代码并制作一个新版本(假设它被接受),你可以使用我的 repo 上的分支。为此,请将 Gemfile
更改为:
gem 'guard-haml', :github => "mattwildig/guard-haml", :branch => 'filename_option'
(我认为还值得指出的是,如果其中一个“子”模板发生更改,此设置不会自动重建“父”文件)。
我的文件结构如下所示:
Guardfile
resolution1/menu/page1.haml
resolution1/menu/some_partial.haml
resolution2/...
resolution3/...
现在,在 page1.haml 中,我有一条线可以在其中呈现部分 haml(我没有使用 Rails)
= Haml::Engine.new(File.read("./some_partial.haml")).render
它失败了:
Error: No such file or directory @ rb_sysopen - ./some_partial.haml
因为我的工作目录是 Guardfile 所在的目录。应该工作的解决方法是:
= Haml::Engine.new(File.read("#{__dir__}/some_partial.haml")).render
或者如果我感到绝望,即使这样(获取文件绝对路径)
= Haml::Engine.new(File.read("#{File.expand_path(File.dirname(__FILE__))}/some_partial.haml")).render
但是,这并没有像我希望的那样工作。
File.expand_path(File.dirname(__FILE__))
它没有给我文件的绝对路径(不考虑工作目录),而是给我工作目录的绝对路径。
当然,我可以设置可行的路径,但我不想在每次渲染中都包含我的目标分辨率。
我的Guardfile
guard :haml, output: '../package/www' do
watch(/^.+(\.haml)$/)
end
我正在使用 Windows,该死的我的生活。有什么建议么?我只需要从同一目录中的文件中获取文件。
这是由 Guard::Haml 处理模板的方式造成的。 It (currently) does this:
content = File.new(file).read
engine = ::Haml::Engine.new(content, (options[:haml_options] || {}))
它将模板读入一个字符串,然后将该字符串传递给 Haml。这意味着当 Haml 看到该字符串时,它无法知道它应该与哪个文件相关联。
Haml 有一个 :filename
option 允许您将文件名传递给 Haml。这允许 __FILE__
和 __dir__
正常工作,但 Guard::Haml 目前不使用它。
我创建了一个 pull request that adds this feature。如果你想在合并之前试用该代码并制作一个新版本(假设它被接受),你可以使用我的 repo 上的分支。为此,请将 Gemfile
更改为:
gem 'guard-haml', :github => "mattwildig/guard-haml", :branch => 'filename_option'
(我认为还值得指出的是,如果其中一个“子”模板发生更改,此设置不会自动重建“父”文件)。