web-dev-qa-db-ja.com

Rails 3.1アセットのプリコンパイル-すべてのjavascriptファイルを含める

私はRails 3.1でプリコンパイル用のアセットをさらに取得します。特に、ファイルをコンパイルするためのデフォルトのマッチャーは.jsファイルをvendor/assets/javascriptsから追加しません。 config.assets.precompileリストにアセットを追加することはできますが、これは迷惑に思えます。すべてのページに含める必要はないので、application.jsマニフェストでそれらを参照したくありません。

要約すると、.jsで見つかったすべてのvendor/assets/javascriptsファイルをrake assets:precompileでプリコンパイルするように要求する方法はありますが、すべてのページに含める必要はありませんか?

48
Peter

config.assets.precompileは正規表現とワイルドカードのマッチングを受け入れます。したがって、all jsファイルが名前で指定されずにコンパイルされるようにするには、次のような方法が役立ちます。

config.assets.precompile << '*.js'
69
pat

Rails config.assets.precompile設定をapp/assetsのすべてのCSSファイルとJSファイルを処理するように に変更し、ここに私のバージョンがあります。 _から)

config.assets.precompile << Proc.new { |path|
  if path =~ /\.(css|js)\z/
    full_path = Rails.application.assets.resolve(path).to_path
    app_assets_path = Rails.root.join('app', 'assets').to_path
    vendor_assets_path = Rails.root.join('vendor', 'assets').to_path

    if ((full_path.starts_with? app_assets_path) || (full_path.starts_with? vendor_assets_path)) && (!path.starts_with? '_')
      puts "\t" + full_path.slice(Rails.root.to_path.size..-1)
      true
    else
      false
    end
  else
    false
  end
}
2
Piotr Kuczynski
# Precompile *all* assets, except those that start with underscore
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/

詳細な説明については、55分 ブログ を参照してください。

これにより、JavaScript(.js、.coffee、.swf、.css、.scss)だけでなく、すべてのアセットがプリコンパイルされます

0
Ode