2011-09-02 2 views
48

레일즈 3.1이 프리 컴 파일레이션을 위해 더 많은 애셋을 선택하도록합니다. 특히, 파일을 컴파일하기위한 기본 매처는 에서 .js 파일을 추가하지 않습니다. config.assets.precompile 목록에 애셋을 추가 할 수는 있지만 이는 매우 짜증납니다. application.js 매니페스트에서 그들을 참조하고 싶지 않습니다. 모든 페이지에 포함시키지 않기 때문입니다.레일스 3.1 애셋 사전 컴파일 - 모든 자바 스크립트 파일 포함

요약하면 vendor/assets/javascripts에있는 모든 .js 파일을 요청하는 방법은 rake assets:precompile에 의해 사전 컴파일되지만 모든 페이지에 포함되지는 않습니까?

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

답변

69

config.assets.precompile 정규 표현식과 와일드 카드 매칭을 받아 그렇게 이름으로 각을 지정하지 않고, 파일을 컴파일받을 모든 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 
} 
+0

regexp 모든 일반 js 및 CSS 있지만 모든 커피 또는 scss 파일을 추가 할? 나는 하나를 쓰려고 노력했는데 작동하지 않는다 ... – Andrew

+20

이미 프리 컴파일 된 것을 덮어 쓰고 싶을 것이다 :'config.assets.precompile = [ '* .js', '* .css']' . – pat

+1

이미지에 무언가를 추가하고 싶을 수도 있습니다. – pat

0
# Precompile *all* assets, except those that start with underscore 
config.assets.precompile << /(^[^_\/]|\/[^_])[^\/]*$/ 
(_부터 시작)

전체 설명은 55 분 Blog을 참조하십시오.

이 어떤 자산을 사전 컴파일 할뿐만 아니라 자바 스크립트 (의 .js, .coffee, SWF는, .CSS, .scss) 내가 여기에 조금 바보를 줘서 죄송하지만 당신은 추가의 예를 보여줄 수

+0

대단합니다. 모든 자산을 사전 컴파일하지 않을 * 이유가 있습니까? – AlexChaffee

+0

@AlexChaffee SASS와 같은 것을 사용하고 있거나 자산의 '묶음'을 준비 할 때 주석이 필요한 경우. –

관련 문제