デフォルトのコンパイル対象
Railsではアセットのプリコンパイルを行うために以下のRakeタスクを実行します。
rake assets:precompile
これによってapp/assetsディレクトリの中のファイルの内、.jsと**.cssファイル以外の全てのファイルがコンパイルされます。ただし、application.jsとapplication.cssはコンパイルされます。
このようになっているのはapplication.jsやapplication.css**からインクルードされるだけのファイルがコンパイルされることを防ぐためです。
コンパイル対象の追加
hogehoge.coffeeをコンパイル対象に追加してhogehoge.jsを生成したい場合はconfig/initializers/assets.rbに以下の行を追加します。
Rails.application.config.assets.precompile << 'hogehoge.js'
hogehoge.coffeeではなく、hogehoge.jsを追加していることに注意して下さい。
fugafuga.scssをコンパイルしてfugafuga.cssを生成したい場合も同様に
Rails.application.config.assets.precompile << 'fugafuga.css'
とします。
コンパイル対象の除外
時々、app/assetsディレクトリの中に**.jsonや.htmlなどの拡張子を持つファイルを置きたくなることがあります(それが良いどうかは置いといて)。
そして、それらをプリコンパイル対象から外したい場合には以下の様にconfig/initializers/assets.rb**に記述します。
# .js .css .html .jsonファイルはコンパイルしないようにする
precompile_target = lambda do |filename, path|
puts filename
path =~ /app\/assets/ && !%w(.js .css .html .json).include?(File.extname(filename))
end
Rails.application.config.assets.precompile = [
precompile_target,
/(?:\/|\\|\A)application\.(css|js)$/
]
コンパイル対象を追加したい場合は、この下にさきほど紹介したコードを書きます。
参考(デフォルトの挙動の実装)
config.assets.precompileのデフォルト値は以下の様に実装されています。
sprockets-rails-2.2.4/lib/sprockets/railtie.rb:60
LOOSE_APP_ASSETS = lambda do |filename, path|
path =~ /app\/assets/ && !%w(.js .css).include?(File.extname(filename))
end
sprockets-rails-2.2.4/lib/sprockets/railtie.rb:75
config.assets.precompile = [LOOSE_APP_ASSETS, /(?:\/|\\|\A)application\.(css|js)$/]