2011-09-02 19 views
48

Rails 3.1でプリコンパイルのために私のアセットをもっと拾いたい。特に、ファイルをコンパイルするためのデフォルトマッチャーは、vendor/assets/javascriptsからのファイルを.jsに追加しません。私はちょうどconfig.assets.precompileリストに資産を追加することができますが、これは迷惑なようです。私はapplication.jsマニフェストでそれらを参照したくありません。なぜなら、それらをすべてのページに含めたくないからです。Rails 3.1のアセット・プリコンパイル - すべてのjavascriptファイルを含む

要約すると、どのような方法は、それらがすべてのページに含まれなくても、vendor/assets/javascriptsで見つかったすべてのファイルが.jsrake assets:precompileでプリコンパイルを取得することを要求しますか?

答えて

69

config.assets.precompileは、正規表現とワイルドカードのマッチングを受け入れる - そうすべてのjsファイルがコンパイルさ、名前でそれぞれを指定せずに、このようなものは、トリックを行う必要があります確保するために:

config.assets.precompile << '*.js' 
+0

をプリコンパイルしますすべてのプレーンjsとcssを追加する正規表現ですが、すべてのコーヒーやscssファイルは追加しませんか?私はそれを書こうとしてきましたが、それは働いていません... – Andrew

+20

あなたはおそらくすでにプリコンパイルされているものを上書きしたいでしょう: 'config.assets.precompile = ['* .js'、 '* .css']' 。 – pat

+1

イメージにも何かを追加したいと思うかもしれませんが。 – pat

2

私はRails config.assets.precompile setting to process all CSS and JS files in app/assetsで与えられた例を修正しましたそして、ここで/アプリやパーシャル除く/ベンダーからすべての資産を取る私のバージョン、ある

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 
} 
0
# Precompile *all* assets, except those that start with underscore 
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 
(_から始まります)

詳しい説明は、55分Blogを参照してください。

これは、私がここで少しばかであることをお詫び申し上げますが、あなたは追加の例を示すことができたすべての資産だけではなく、JavaScriptの(.jsファイル、.coffee、swfファイル、の.css、.scss)

+0

は、これは素晴らしいです。私が*すべての資産をプリコンパイルしない理由がありますか? – AlexChaffee

+0

@AlexChaffee SASSのようなものを使用している場合や、資産の「バンドル」を準備するためにコメントが必要な場合。 –

関連する問題