Middleman, 便利だけど
サードパーティ製のコンポーネントはgemじゃなくてBowerで管理したいなって気持ちの時に
Bowerの設定
Middlemanで新しいプロジェクト作って
プロジェクトディレクトリに移動する
middleman init [Project Name]
cd [Project Name]
Bowerの初期設定をする
色々聞かれると思いますが適当に
bower init
init
が終わったらbower.json
というファイルができる
続いて.bowerrc
というファイルを作って
コンポーネントをどのディレクトリにインストールするか設定する
touch .bowerrc
{
"directory": "vendor/assets/components"
}
directory
はそれぞれ好みで設定する
.bowerrc
で特に指定しない場合、
インストールディレクトリはbower_components
というところになる
config.rb
MiddlemanでBowerで管理しているコンポーネントディレクトリ以下を
読むようにするための設定をconfig.rb
に追記
after_configuration do
bowerrc = JSON.parse File.read(File.join "#{root}", '.bowerrc')
bower_dir = bowerrc['directory']
sprockets.append_path File.join("#{root}", bower_dir)
end
フォントファイル問題
Middlemanのドキュメントによると
Bower使う場合は上記のようにsprockets.append_path
してね、ということらしいけれど
この記述だけだとbootstrap-sass
やfont-awesome
のフォントファイル(.ttf
や.woff
など)を
読み込んでくれないみたい
対策としてフォントファイルがある場所を直接append_path
するといいみたいなので
パターンマッチでコンポーネントディレクトリ以下の
bower.json
,component.json
,.bower.json
を探して
main
に記述されているファイルのディレクトリを
append_path
することにした
after_configuration do
bowerrc = JSON.parse File.read(File.join "#{root}", '.bowerrc')
bower_dir = bowerrc['directory']
sprockets.append_path File.join("#{root}", bower_dir)
Dir.glob File.join "#{root}", bower_dir, '**/*', '{bower,component,.bower}.json' do |f|
bower = JSON.parse File.read(f), create_additions: false
dirname = File.dirname f
case bower['main']
when String
sprockets.append_path File.dirname(File.join(dirname, bower['main']))
when Array
bower['main'].each do |name|
sprockets.append_path File.dirname(File.join(dirname, name))
end
end
end
end
この辺りに関してはいろいろやり方があるみたいで
これがベストかどうかわからないけれど
とりあえずこれでbootstrap-sass
やfont-awesome
のフォントファイルが参照できるようになった
参考
http://middlemanapp.com/jp/basics/asset-pipeline/
https://github.com/sstephenson/sprockets/blob/master/lib/sprockets/bower.rb#L43-L54
https://github.com/bower/json/blob/0.4.0/lib/json.js#L7
https://github.com/twbs/bootstrap-sass/issues/592