Skip to content

Instantly share code, notes, and snippets.

@rummelonp
Created February 1, 2012 09:15
Show Gist options
  • Save rummelonp/1716090 to your computer and use it in GitHub Desktop.
Save rummelonp/1716090 to your computer and use it in GitHub Desktop.
Ruby だけで Twitter Bootstrap コンパイルするやつ

Ruby だけで Twitter Bootstrap コンパイルするやつ

Node.js とか入れなくても Ruby だけで Twitter Bootstrap コンパイル出来るようにした
mitukiii/bootstrap - GitHub

自分の環境

Mac OS 10.7.2
rvm 1.10.2
ruby 1.9.2p290

Twitter Bootstrap をコンパイル

git clone git://github.com/mitukiii/bootstrap.git
cd bootstrap
bundler install
rake bootstrap

*.less ファイルの変更を監視してコンパイル

rake watch

経緯

Ruby の less gem でも lessc コマンド使えるんだけど
それだと *.less 中で import してるファイルのパスが解決出来なくてコンパイル失敗する
import をプロジェクトルートからのパスで書けばいけたんだけどなんとなくスマートじゃない
だからと言って Node.js とか npm とか入ってなくて JavaScript の less のコンパイラを用意するのが面倒だった
なので rake で書きなおした

その他

ちょっとあれこれ弄りたいことあるかもしれないからって rake 書いたは良いけど
普通にアーカイブ落として動作気に入らないところは自前の CSS で上書きすれば良いと思った

source 'http://rubygems.org'
gem 'less'
gem 'uglifier'
gem 'watchr'
# -*- coding: utf-8 -*-
require 'rubygems'
require 'bundler'
Bundler.require
def bootstrap
system 'mkdir -p bootstrap/img'
system 'mkdir -p bootstrap/css'
system 'mkdir -p bootstrap/js'
puts 'Copying images...'
system 'cp img/* bootstrap/img/'
puts 'Compiling less files...'
parser = Less::Parser.new(:paths => Dir['less/**/'])
doc = open('less/bootstrap.less').read
tree = parser.parse(doc)
open('bootstrap/css/bootstrap.css', 'w')
.print(tree.to_css)
open('bootstrap/css/bootstrap.min.css', 'w')
.print(tree.to_css(:compress => true))
doc = open('less/responsive.less').read
tree = parser.parse(doc)
open('bootstrap/css/bootstrap.responsive', 'w')
.print(tree.to_css)
open('bootstrap/css/bootstrap.min.responsive', 'w')
.print(tree.to_css(:compress => true))
puts 'Join javascript files...'
system 'cat js/bootstrap-transition.js \
js/bootstrap-alert.js \
js/bootstrap-button.js \
js/bootstrap-carousel.js \
js/bootstrap-collapse.js \
js/bootstrap-dropdown.js \
js/bootstrap-modal.js \
js/bootstrap-tooltip.js \
js/bootstrap-popover.js \
js/bootstrap-scrollspy.js \
js/bootstrap-tab.js \
js/bootstrap-typeahead.js > bootstrap/js/bootstrap.js'
doc = open('bootstrap/js/bootstrap.js').read
open('bootstrap/js/bootstrap.min.js', 'w')
.print(Uglifier.compile(doc, :copyright => false))
end
task :default => :bootstrap
desc 'Build simple bootstrap directory'
task :bootstrap do
bootstrap
end
desc 'Watch less files'
task :watch do
puts 'Watching less files...'
script = Watchr::Script.new
script.watch('less/.*\.less') do
bootstrap
end
handler = Watchr.handler.new
controller = Watchr::Controller.new(script, handler)
controller.run
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment