2013-09-26 71 views
7

我正在使用資產管道的Rails應用程序。 development.rb具有以下內容:Rails 3.2 Dev環境sourceMaps支持JavaScript

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

在Dev環境中,資產沒有捆綁在一起,每個資源都由Rails分別提供。此時,單獨獲得服務的資產數量超過了50個。因此,整頁重新加載速度非常緩慢。

我想將它們至少連接在一些資產上,以加快在開發環境中的加載時間,但是這樣做,我失去了在Chrome開發工具中單獨調試/查看它們的能力。例如:http://d.pr/i/ZFge

有兩種方法來解決這個在我的知識,你做後:

config.assets.debug = false 

,並開始投放作爲級聯資產。

  1. 老哈克路:@sourceUrl把戲。
  2. 新辦法:sourceMaps

有沒有關於如何在rails應用上啓用它們的指南?我不使用CoffeeScript,因此https://github.com/markbates/coffee-rails-source-maps沒有幫助。大多數谷歌搜索引導到。

我正在尋找原生JS的解決方案。

回答

13

我還沒有看到這個問題的現有解決方案。但構建一個將是非常簡單的。

以下假定gem uglifier是使用中的js壓縮機。

uglifier的第2版有一個創建sourcemap的機制。它具有以下語法

uglified, source_map = Uglifier.new.compile_with_map(source) 

滑軌資產管道可以使用下面的語法有關here

一個簡單的變壓器類

config.assets.js_compressor = Transformer.new 

讀取指定自定義JS壓縮機(帶compress法)看起來像下面的

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 

注意:這只是解釋概念的完整解決方案。您可以在此基礎上添加方法,使其更加健壯。

+0

爲了解決問題,我放棄了試圖推出這個項目。這感覺就像服務資產過程中非常關鍵的一部分一樣。這裏意外的錯誤會導致太多頭痛。 它的遺憾還沒有官方的方式來做到這一點。 – Rajat