2011-09-02 11 views
48

Rails 3.1'in pre-derleme için varlıklarımdan daha fazlasını almasını istiyorum. Özellikle, dosyaları derlemek için varsayılan eşleştirici, vendor/assets/javascripts'dan .js dosyalarını eklemez. Varlıkları config.assets.precompile listesine ekleyebilirim, ancak bu can sıkıcı görünüyor. Bunları application.js bildirisinde belirtmek istemiyorum, çünkü bunların tüm sayfalarda yer almasını istemiyorum.Raylar 3.1 varlık precompilation - tüm javascript dosyalarını dahil

Özetle, herhangi bir şekilde, ama hepsini sayfalarda yer kalmadan vendor/assets/javascripts bulunan tüm .js dosyaları rake assets:precompile tarafından precompiled olsun istemek için?

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

cevap

69

config.assets.precompile düzenli ifadeler ve joker eşleme kabul yüzden adıyla her belirtmeden, dosyalar derlenmiş olsun tüm js sağlamak için, böyle bir şey hile yapmak gerekir ve burada/app ve partials hariç/satıcıdan tüm varlıkları alır benim versiyonudur

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

Tüm düz js ve css eklemek için bir regexp ama tüm kahve veya scss dosyaları DEĞİL? Bir tane yazmaya çalışıyorum ve işe yaramıyor ... – Andrew

+20

Muhtemelen hazırda bulunanların üzerine yazmak isteyebilirsiniz: 'config.assets.precompile = ['* .js', '* .css']' . – pat

+1

Yine de resimleriniz için bir şeyler eklemek isteyebilirsiniz. – pat

0
# Precompile *all* assets, except those that start with underscore 
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 
(_ başlayarak)

Tam açıklama için 55 dakika Blog referansını kullanın.

Bu herhangi bir varlık, derleme olacaktır sadece JavaScript (.js, .coffee, .swf, .css .scss) burada ufak daft için üzgünüm ama bir ekleme örneği gösterilebilir

+0

Bu harika. Tüm varlıkları önceden girmek istemem için herhangi bir sebep var mı? – AlexChaffee

+0

@AlexChaffee SASS gibi bir şey kullanıyorsanız veya varlıkların 'demetlerini' hazırlamak için yorum gerektiriyorsa. –