2012-09-27 35 views
14

如何config.assets.precompile在生產中使用只包含在「的lib /資產/ JavaScript的」,「LIB /資產/樣式表」,「供應商/資產/ JavaScript的」和「供應商/資產/樣式表」的文件?如何將config.assets.precompile用於目錄而不是單個文件?

基本上是這樣的:

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

但用於汽車包括不屬於「應用程序/資產/ Java腳本」或「應用程序/資產/樣式表的特定目錄中的文件。

*編輯:加入我結束了使用頁面特定JS

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

回答

27

你可以簡單地把它寫這樣的:

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

哇,看起來很簡單:]今天晚些時候我會測試它。謝謝! – eddywashere

+0

不客氣,我希望這是幫助! – zolter

+1

再次感謝!我使用的示例是一個頁面目錄。 'config.assets.precompile + = ['pages/*。js']' 只要頁面目錄位於config.assets.paths的任何路徑中,它就會工作。 (如/ lib/assets/javascripts) – eddywashere

0

我發現這個鏈接的解決方案,並認爲可能是這對你有所幫助,請參閱

keithgaputis的答案。 Rails config.assets.precompile setting to process all CSS and JS files in app/assets

我認爲你可以像以下。

# 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 
} 
3

編譯資產的目的是構建一個(或少量的)文件,以儘量減少來自瀏覽器的HTTP請求的數量。

如果你要單獨服務於每個文件,那麼爲什麼不只是禁用預編譯?

要使用預編譯的預期,建立一個完整的目錄到一個文件中使用鏈輪require_directory

//= require_directory ./awesome_js_app 

...那你config.assets.precompile陣列文件列表。

默認情況下,所有CSS內置到application.css & JS到application.js。 (如果你願意等ENVS。)您可以添加更多的頂級文件與預編譯指令編譯config/environments/production.rb例如:

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

然後鏈輪//= require ...指令在那些頂級的文件將決定組成的最終編譯文件。

您可以使用這些額外的頂層文件可以在您的佈局有不同的CSS & JS肯定意見。

+0

謝謝,我想在1個赫然打包文件我的應用程序範圍的樣式和腳本採取的性能提升優勢。我應該說我想使用頁面特定的JS和可能的CSS。雖然我想指出的是,在頁面特定的CSS上使用js邏輯來確定它是否在正確的頁面上,將body上的類添加到頁面特定的css中並不是那麼痛苦。 – eddywashere

0

這可能是一個更好一點,包括這個作爲一種資產路徑(根據你的榜樣的解決方案將是):

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

它還允許您包含不在資產目錄中的路徑(例如包含bootstrap-sass)。然後,這些路徑會添加到您的公共目錄中的資產文件夾中,如果使用asset_sync之類的字詞,則會將其推送到您的資產位置。

相關問題