目前,Compass 正在查看src.scss
文件夹中的文件并自动更新 cs 文件。(通过键入)。compass watch myproject
有没有办法在“观看过程”中包含haml文件?
(我无法安装 StaticMatic,因为我不想安装 Ruby1.8)。
目前,Compass 正在查看src.scss
文件夹中的文件并自动更新 cs 文件。(通过键入)。compass watch myproject
有没有办法在“观看过程”中包含haml文件?
(我无法安装 StaticMatic,因为我不想安装 Ruby1.8)。
首先,您应该使用 RVM。安装任何版本的 Ruby 都变得轻而易举。
其次,我只是为自己编写了这个,使用了 Compass 用来查看文件的同一个“fssm”gem。将此添加到您的 / 创建一个 Rakefile:
require 'rubygems'
require 'fssm'
require 'haml'
class HamlWatcher
class << self
def watch
refresh
puts ">>> HamlWatcher is watching for changes. Press Ctrl-C to Stop."
FSSM.monitor('haml', '**/*.haml') do
update do |base, relative|
puts ">>> Change detected to: #{relative}"
HamlWatcher.compile(relative)
end
create do |base, relative|
puts ">>> File created: #{relative}"
HamlWatcher.compile(relative)
end
delete do |base, relative|
puts ">>> File deleted: #{relative}"
HamlWatcher.remove(relative)
end
end
end
def output_file(filename)
# './haml' retains the base directory structure
filename.gsub(/\.html\.haml$/,'.html')
end
def remove(file)
output = output_file(file)
File.delete output
puts "\033[0;31m remove\033[0m #{output}"
end
def compile(file)
output_file_name = output_file(file)
origin = File.open(File.join('haml', file)).read
result = Haml::Engine.new(origin).render
raise "Nothing rendered!" if result.empty?
# Write rendered HTML to file
color, action = File.exist?(output_file_name) ? [33, 'overwrite'] : [32, ' create']
puts "\033[0;#{color}m#{action}\033[0m #{output_file_name}"
File.open(output_file_name,'w') {|f| f.write(result)}
end
# Check that all haml templates have been rendered.
def refresh
Dir.glob('haml/**/*.haml').each do |file|
file.gsub!(/^haml\//, '')
compile(file) unless File.exist?(output_file(file))
end
end
end
end
namespace :haml do
desc "Watch the site's HAML templates and recompile them when they change"
task :watch do
require File.join(File.dirname(__FILE__), 'lib', 'haml_watcher')
HamlWatcher.watch
end
end
运行它:
rake haml:watch