現在、Compass はsrc.scss
フォルダー内のファイルを監視し、cs ファイルを自動的に更新しています。( と入力して)。compass watch myproject
「監視プロセス」にhamlファイルを含める方法はありますか?
(Ruby1.8 をインストールしたくないので、StaticMatic をインストールできませんでした)。
現在、Compass はsrc.scss
フォルダー内のファイルを監視し、cs ファイルを自動的に更新しています。( と入力して)。compass watch myproject
「監視プロセス」にhamlファイルを含める方法はありますか?
(Ruby1.8 をインストールしたくないので、StaticMatic をインストールできませんでした)。
まず、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