You can clone with
class LessCssFile < StaticFile
# do nothing
class LessJsGenerator < Generator
src_root = site.config['source']
dest_root = site.config['destination']
less_ext = /\.less$/i
lessc_bin = site.config['lessc'] || 'lessc'
# static_files have already been filtered against excludes, etc.
site.static_files.each do |sf|
next if not sf.path =~ less_ext
less_path = sf.path
css_path = less_path.gsub(less_ext, '.css').gsub(src_root, dest_root)
relative_dir = File.dirname(css_path).gsub(dest_root, '')
file_name = File.basename(css_path)
command = [lessc_bin,
puts 'Compiling LESS: ' + command
raise "LESS compilation error" if $?.to_i != 0
# Add this output file so it won't be "cleaned away"
site.static_files << LessCssFile.new(site, site.source, relative_dir, file_name)
Added the "LessCssFile" subclass of a StaticFile so that the newly generated CSS file won't be automatically "cleaned" out of the output directory after rendering.
Cool! I'm planning to bundle this up with a few other plugins and stick it in a repo. There's an open ticket on the Jekyll project discussing workarounds for the new cleaning -- this is actually one of the cleaner workarounds. See https://github.com/mojombo/jekyll/issues/268 for that.
Hello. I have found a bug in this logic, at least when I am running it locally. By modifying the site.static_files array in the loop there is the potential for processing elements twice or skipping some entirely.
My fix is to use a copy of the array, so: