手动将haml编译为具有外部文件要求的html,就像这样执行
haml --require .\stuff.rb --require .\const.rb .\pages\exit.haml .\pages\exit.html
然而,我想切换到haml guard。不幸的是,我无法找到正确的标志来传递它的工作。我需要的是:
guard :haml, haml_options: {require: './stuff.rb ./const.rb'} do
watch(/^.+(\.haml)$/)
end
结果:
14:19:19 - 错误 - 页面/ exit.haml的HAML编译失败! [#]错误:未定义的方法`html_safe'为零:NilClass
表明既不包括方法也不包括常量。
有什么想法吗?
编辑: 我使用Ruby 2.3.1p112(2016-04-26修订版54768)[x64-mingw32](Win10),Haml 4.0.7。
最小化的例子:
test.haml
!!!
%html
%header
%body
%p
=$BT_OK.html_safe
const.rb
$BT_OK = " ".html_safe
helpers.rb
class String
def html_safe?
defined?(@html_safe) && @html_safe
end
def html_safe
@html_safe = true
self
end
end
require 'haml/helpers/xss_mods'
module Haml::Helpers
include Haml::Helpers::XssMods
end
使用命令行haml .\debug\test.haml .\debug\test.html -r .\const.rb -r .\helpers.rb
<!DOCTYPE html>
<html>
<header></header>
<body>
<p>
</p>
</body>
</html>
使用亚马逊解决方案时出错:
08:02:06 - ERROR - Invalid Guardfile, original error is:
> [#]
> [#] undefined method `html_escape' for module `Haml::Helpers',
> [#] backtrace:
> [#] (dsl)> C
> [#] (dsl)> C
> [#] (dsl)> C
> [#] (dsl)> C
答案 0 :(得分:1)
guard-haml
runs Haml “in process”,因此要在您的Haml脚本中提供这些文件,您需要在Guardfile
中要求这些文件。你也需要先要求Haml,因为你的助手会参考Haml的模块中的一些:
require 'haml'
require './helpers'
require './const'
guard :haml do
watch(/^.+(\.haml)$/)
end