我对HAML和Coffeescript感到非常兴奋,并正在研究教程,展示了如何在非轨道环境中使用它们。因此,HAML易于使用命令行实用程序

haml input.haml output.html.

而且,很棒的是,有一个项目(许多叉子之一: https://github.com/aussiegeek/coffee-haml-filter)旨在提供自定义过滤器,该过滤器将CoffeeScript转换为HAML文件内部的JS。不幸的是(或我缺少什么?)HAML不允许在命令行或某些配置文件上指定自定义过滤器。

我(我不是红宝石粉丝,甚至不知道它)用这个辅助脚本设法解决了(基于某个地方的一些聪明的建议):haml.rb

require 'rubygems'
require 'active_support/core_ext/object/blank'
require 'haml'
require 'haml/filters/coffee'

template = ARGV.length > 0 ? File.read(ARGV.shift) : STDIN.read
haml_engine = Haml::Engine.new(template)
file = ARGV.length > 0 ? File.open(ARGV.shift, 'w') : STDOUT
file.write(haml_engine.render)
file.close

这很简单,除了一开始需要的要求。

现在,问题是:

1)我应该真正使用它,还是有其他方法可以使用自定义过滤器进行按需HAML进行HTML汇编?

2)HAML手表模式呢?很棒,方便。我当然可以在 python 这将观看目录的更改并称之为 .rb 脚本,但看起来像是一个肮脏的解决方案。

除了Heikki的答复, ,我的解决方案遵循:https://gist.github.com/759002

如果您觉得有用,请随时使用

有帮助吗?

解决方案

1)我会说是的。 (我也没有命令行选项运气)

2)我得到了一个示例,可以使用咖啡脚本过滤器。观看文件已完成 FSSM宝石. 。它在输入文件夹中递归地跟踪对HAML文件的更改,并将其渲染到使用.HTML文件扩展程序输出文件夹。

watch.rb:

require 'rubygems'
require 'fssm'
require 'haml'
require 'coffee-haml-filter'
require 'active_support/core_ext/object/blank'

def render(input_dir, output_dir, relative)
  input_path = File.join(input_dir, relative)
  output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
  haml_engine = Haml::Engine.new(File.read(input_path))
  puts "Rendering #{input_path} -> #{output_path}"
  FileUtils.makedirs(File.dirname(output_path))
  File.open(output_path, 'w') do |file|
    file.write(haml_engine.render)
  end
end

input_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : '.')
output_dir = File.expand_path(ARGV.length > 0 ? ARGV.shift : input_dir)

puts "Input folder:  '#{input_dir}'"
puts "Output folder: '#{output_dir}'"

FSSM.monitor(input_dir, '**/*.haml') do
  create {|base, relative| render(input_dir, output_dir, relative) }
  update {|base, relative| render(input_dir, output_dir, relative) }
  delete {|base, relative|
    output_path = File.join(output_dir, relative).gsub(/\.haml$/, ".html")
    puts "Deleting #{output_path}"
    File.delete(output_path)
  }
end

用法:

ruby watch.rb input_folder output_folder

其他提示

好消息:有一个新的Coffeescript HAML过滤器,旨在独立于Rails工作!

https://github.com/paulnicholson/coffee-filter

绝对推荐使用咖啡 - 滤波器,这从未真正积极维护。

--require/-r 选项应适用于加载咖啡本过滤器。它不是在最近的版本中,但这是一个错误。它将在下一个版本中修复。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top