2013-09-26 75 views
7

Tôi đang làm việc trên Ứng dụng Rails bằng cách sử dụng đường dẫn Nội dung. Development.rb có các thông tin sau:Rails 3.2 Môi trường phát triển nguồnMaps hỗ trợ cho JavaScript

config.assets.compress = false 
    config.assets.compile = true 
    config.assets.debug = true 

Trong môi trường Dev, tài sản không được đóng gói và mỗi tài sản được phân phối riêng biệt. Tại thời điểm này, số lượng tài sản được phân phối riêng lẻ là trên 50. Do đó, tải lại trang đầy đủ rất chậm.

Tôi muốn ghép chúng ít nhất trong một vài nội dung để có thời gian tải nhanh hơn trên môi trường dev nhưng làm như vậy, tôi mất khả năng gỡ lỗi/xem chúng riêng lẻ trong các công cụ dành cho Chrome. Ví dụ: http://d.pr/i/ZFge

Có hai cách để giải quyết này trong kiến ​​thức của tôi, sau khi bạn làm:

config.assets.debug = false 

và bắt đầu phục vụ họ tài sản như nối vào nhau.

  1. Old Hacky Way: @sourceUrl trick.
  2. Cách mới: sourceMaps.

Có hướng dẫn về cách tôi có thể bật chúng trên ứng dụng đường ray không? Tôi không sử dụng CoffeeScript để https://github.com/markbates/coffee-rails-source-maps không hữu ích. Hầu hết các tìm kiếm của Google đều dẫn đến điều đó.

Tôi đang tìm giải pháp cho JS gốc.

Trả lời

13

Tôi chưa thấy giải pháp hiện tại cho vấn đề này. Nhưng xây dựng một cái sẽ khá thẳng về phía trước.

Giả định sau gem uglifier là máy nén js đang được sử dụng.

Phiên bản 2 của trình chỉnh sửa uglifier có cơ chế tạo sourcemap. Nó có cú pháp sau

đường ống
uglified, source_map = Uglifier.new.compile_with_map(source) 

Rails tài sản cho phép để xác định tùy chỉnh JS Compressor (với một phương pháp compress) bằng cách sử dụng cú pháp sau

config.assets.js_compressor = Transformer.new 

đọc về điều đó here

Một lớp Transformer đơn giản trông giống như sau

class Transformer 
    def compress(string) 
    if Rails.env.development? 
     output, sourcemap = Uglifier.new.compile_with_map(string) 

     # write the sourcemap to a file somewhere under public 

     sourcemap_comment = "//@ sourceMappingURL=#{sourcemap_path}}\n" 

     return output + sourcemap_comment 
    else 
     Uglifier.compile(string) 
    end 
    end 
end 

Lưu ý: Đây không phải là giải pháp đầy đủ chỉ giải thích các khái niệm. Bạn có thể xây dựng dựa trên điều này và thêm các cách để làm cho nó mạnh mẽ hơn.

+0

Vì độ phân giải, tôi đã từ bỏ cố gắng để cuộn trong việc này. Nó cảm thấy như quá nhiều mucking xung quanh một phần rất quan trọng của quá trình phục vụ tài sản. Sai lầm ngẫu nhiên ở đây sẽ gây ra quá nhiều đau đầu. Đáng tiếc là vẫn không có cách chính thức để thực hiện việc này. – Rajat