2011-08-15 26 views
26

Tôi muốn loại trừ một tệp javascript cụ thể (modernizr) khỏi đường ống vì tôi muốn nó tải riêng.Đường ray 3.1 Đường ống - Loại trừ Tệp Javascript

Tôi muốn tải Modernizr lúc đầu và phần còn lại của javascript của tôi được ghép nối ở cuối.

Có cách nào để làm điều ngược lại với yêu cầu trong đường ống nội dung trong 3.1 không? I E. một loại trừ?

Xin cảm ơn trước.

Adam.

Trả lời

55

tôi đã chọn để giữ cho các chức năng sprockets bằng cách thay đổi

//= require_tree 

để

//= require_directory . 

Điều này sẽ giúp sprockets tự động tải bất kỳ tập tin trong cùng một thư mục, nhưng không phải trong bất kỳ thư mục tiếp theo.

này cho phép tôi di chuyển Modernizr.js đến tài sản/Javascripts/thư mục trên và bằng tay tải nó ở trên cùng với:

<%= javascript_include_tag "top/modernizr" %> 

và di chuyển

<%= javascript_include_tag "application" %> 

Để dưới cùng của tôi tệp application.html.erb (phía trên thẻ body đóng)

+0

nên là ' top/modernizr 'để tìm tập tin của bạn;) – Jay

+0

Good catch Jay. Tôi chỉnh sửa để sửa chữa trong trường hợp bất cứ ai sử dụng để tham khảo ... – Adam

+2

Cảm ơn Adam. Ngoài ra, khi tôi triển khai sản xuất, tôi cần thêm mã này 'config.assets.precompile + = ['top/*. Js', 'top/*. Css']' vào production.rb, nếu không nó sẽ thất bại trong máy chủ của tôi. – Frankel

14

này được dễ dàng hơn thực hiện bằng cách vào config/môi trường/file production.rb của bạn và thêm dòng sau

config.assets.precompile += %w(modernizr.js) 

Sau đó, khi bạn precompile tài sản của bạn hiện đại hóa sẽ có nó là tập tin riêng biệt riêng mà bạn có thể sử dụng trong đầu bạn.

+0

Cảm ơn. Những công việc này.Những gì tôi đã chọn làm là giữ cho gốc của tôi được tự động tải trực tiếp và có bất kỳ thư mục riêng nào chứa các tệp được tải theo cách thủ công. vì vậy trong các nhà cung cấp> asset> javascripts> top tôi đặt modernizr.js. Trong khi tất cả mọi thứ trong tài sản> javascripts vẫn được nạp với sprockets. sử dụng: // = require_directory. trong application.js của tôi – Adam

+0

Trong đường ray 4, điều này có thể được thêm vào tệp config/initializers/assets.rb như dưới đây: Rails.application.config.assets.precompile + =% w (modernizr.js) – maniempire

3

Các câu trả lời này đã lỗi thời. Chỉ cần di chuyển active_admin.css.scss từ app/assets/stylesheets đến vendor/assets/stylesheets.

Làm tương tự với active_admin.js.coffee (di chuyển từ app/assets/javascripts đến vendor/assets/javascripts).

Nội dung của bạn sau đó sẽ được tải khi cần và bạn sẽ không phải thực hiện sửa đổi đối với applications.js để phù hợp với active_admin.

Giải pháp này được mô tả trong this issue. Hi vọng điêu nay co ich.

18

Tôi nhận thấy đây là một câu hỏi cũ, nhưng Google đã gửi cho tôi ở đây tuần trước nên đây không phải là câu hỏi lỗi thời. Câu trả lời tôi tìm thấy ở nơi khác là the "stub" directive for sprockets. Vì vậy, một cái gì đó như

//= require-tree . 
//= stub Modernizr 

Điều này sẽ giúp Modernizr.js thoát khỏi nội dung đi kèm. Nó có thể được bao gồm với thẻ riêng của nó, à la câu trả lời gốc.

Thay đổi Sprockets nói "stub" đã được thêm vào tháng 1 năm 2012, vì vậy nó sẽ không có sẵn tại thời điểm câu hỏi này được trả lời lần đầu tiên, nhưng tôi nghĩ đó là câu trả lời hay.

+0

Không hoạt động ... – Alfie

+0

@Alfie hoạt động cho 'sprockets 3.3.2' tại đây –

+0

@mcdave Yep thực sự hữu ích. – Abhinay

Các vấn đề liên quan