76
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsのアセットのプリコンパイル対象の追加と除外方法

Posted at

デフォルトのコンパイル対象

Railsではアセットのプリコンパイルを行うために以下のRakeタスクを実行します。

rake assets:precompile

これによってapp/assetsディレクトリの中のファイルの内、.jsと**.cssファイル以外の全てのファイルがコンパイルされます。ただし、application.jsとapplication.cssはコンパイルされます。
このようになっているのは
application.jsapplication.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)$/]
76
66
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
76
66

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?