web-dev-qa-db-ja.com

単一のファイルではなく、ディレクトリにconfig.assets.precompileを使用するにはどうすればよいですか?

本番環境でconfig.assets.precompileを使用して、「lib/assets/javascripts」、「lib/assets/stylesheets」、「vendor/assets/javascripts」、「vendor/assets/stylesheets」のファイルのみを含めるにはどうすればよいですか?

基本的に次のようなものです。

config.assets.precompile += %w( pagespecific.js anotherpage.js )

ただし、「app/assets/javascripts」または「app/assets/stylesheets」ではない特定のディレクトリにファイルを自動的に含めるために使用されます。

*編集:ページ固有のjsに使用することになったソリューションを追加する

config.assets.precompile += ['pages/*.js']
16
eddywashere

あなたは単にこのようにそれを書くことができます:

config.assets.precompile += ['directory/*']
30
zolter

アセットをコンパイルするポイントは、ブラウザーからのHTTP要求の数を最小限に抑えるために、1つ(または少数)のファイルを作成することです。

各ファイルを個別に提供する場合は、プリコンパイルを無効にしないのはなぜですか?

意図したとおりにプリコンパイルを使用するには、Sprocketsのrequire_directoryを使用してディレクトリ全体を1つのファイルにビルドします。

//= require_directory ./awesome_js_app

...そしてそのファイルをconfig.assets.precompile配列にリストします。

デフォルトでは、すべてのCSSはapplication.cssに組み込まれ、JSはapplication.jsに組み込まれます。 config/environments/production.rb(および必要に応じて他の環境)のプリコンパイルディレクティブを使用してコンパイルするトップレベルファイルをさらに追加できます。例:

config.assets.precompile += %w( public.css public.js )

次に、これらのトップレベルファイルのSprockets //= require ...ディレクティブが、最終的にコンパイルされたファイルの構成を決定します。

レイアウトでこれらの追加のトップレベルファイルを使用して、特定のビューに対して異なるCSSとJSを使用できます。

3
Mars

これをアセットパスとして含める方がおそらく少し良いでしょう(ソリューションの例によると):

config.assets.paths << Rails.root.join('app', 'assets', 'javascripts', 'pages')

また、アセットディレクトリにないパスを含めることもできます(たとえば、bootstrap-sassを含める)。これらのパスは、パブリックディレクトリのアセットフォルダに追加され、asset_syncなどを使用している場合はアセットの場所にプッシュされます。

1
FuzzyJulz

私はこのリンクを見つけました、そしてそれがあなたのために役立つかもしれないと思います、見てください

keithgaputisの答え。 app/assets内のすべてのCSSおよびJSファイルを処理するためのRailsconfig.assets.precompile設定

次のようにできると思います。

# In production.rb
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
    if full_path.starts_with? app_assets_path
      puts "excluding asset: " + full_path
      false
    else
      puts "including asset: " + full_path
      true
    end
  else
    false
  end
}
0
piam

Sprockets 3以降では、manifest.jsファイルを使用して、プリコンパイルされるファイルまたはディレクトリを宣言できます。 アップグレードドキュメント を参照してください。したがって、構成に次を追加します。

config.assets.precompile = %w(manifest.js)

次に、app/assets/config /manifest.jsで

//= link_directory ../pages .js

使用する link_treeネストされたサブディレクトリ内のjsファイルもプリコンパイルする場合。

0
nates