-
-
Save adunkman/920651 to your computer and use it in GitHub Desktop.
Jekyll plugin to render LESS (lesscss.org) files during generation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Jekyll | |
class LessCssFile < StaticFile | |
def write(dest) | |
# do nothing | |
end | |
end | |
class LessJsGenerator < Generator | |
safe true | |
priority :low | |
def generate(site) | |
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 | |
site.static_files.delete(sf) | |
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) | |
FileUtils.mkdir_p(File.dirname(css_path)) | |
begin | |
command = [lessc_bin, | |
less_path, | |
css_path | |
].join(' ') | |
puts 'Compiling LESS: ' + command | |
puts `#{command}` | |
raise "LESS compilation error" if $?.to_i != 0 | |
end | |
# Add this output file so it won't be "cleaned away" | |
site.static_files << LessCssFile.new(site, site.source, relative_dir, file_name) | |
end | |
end | |
end | |
end |
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:
site.static_files.dup.each do
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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 jekyll/jekyll#268 for that.