2013-09-26 10 views
7

Pracuję nad aplikacją Railsową przy użyciu potoku Asset. Development.rb ma:Rails 3.2 Środowisko Dev sourceMaps obsługa JavaScript

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

W środowisku Dev, aktywa te nie są powiązane i każdy jest serwowane przez Rails indywidualnie. W tym momencie liczba zasobów, które są udostępniane indywidualnie, przekracza 50. Dlatego pełne przeładowania strony są bardzo powolne.

Chciałbym je połączyć w co najmniej kilku zasobach, aby przyspieszyć ładowanie środowiska deweloperskiego, ale dzięki temu stracę możliwość debugowania/zobaczenia ich indywidualnie w narzędziach do Chrome. Przykład: http://d.pr/i/ZFge

Istnieją dwa sposoby, aby rozwiązać ten problem w mojej wiedzy, po wykonaniu:

config.assets.debug = false 

i zacząć wyświetlać je jako aktywa konkatenowanych.

  1. Old Hacky Way: @sourceUrl trick.
  2. Nowy sposób: sourceMaps.

Czy istnieje przewodnik, w jaki sposób mogę je włączyć w aplikacji szyny? Nie używam CoffeeScript, więc https://github.com/markbates/coffee-rails-source-maps nie jest pomocne. Większość wyszukiwań w Google prowadzi do tego.

Szukam rozwiązania dla macierzystego JS.

Odpowiedz

13

Nie widziałem istniejącego rozwiązania tego problemu. Ale budowa jednego będzie całkiem prosta.

Następujący zakłada, że ​​gem uglifier jest używaną sprężarką.

Wersja 2 z uglifier ma mechanizm do tworzenia sourcemap. To ma następującą składnię

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

Szyny atutem rurociąg pozwala określić niestandardową JS sprężarki (z metodą compress) używając następującej składni

config.assets.js_compressor = Transformer.new 

przeczytać o tym here

prostą klasę Transformer będzie wyglądać następująco:

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 

Notatka: To nie jest pełne rozwiązanie, tylko wyjaśnianie pojęć. Możesz na tym oprzeć i dodać sposoby, aby uczynić go bardziej niezawodnym.

+0

W trosce o porządek, porzuciłem próbę wprowadzenia tego. Wydawało mi się, że zbyt wiele miażdży się w bardzo krytycznej części procesu udostępniania zasobów. Przypadkowy błąd tutaj spowodowałby zbyt duży ból głowy. Szkoda, że ​​nadal nie ma oficjalnego sposobu, aby to zrobić. – Rajat

Powiązane problemy