2014-02-11 2 views
22

У меня есть двухэтапный процесс компиляции для моего веб-приложения. Во-первых, я компилирую файлы CoffeeScript в файлы JavaScript [1]. Затем файлы JavaScript (оба, входящие в состав CoffeeScript и внешние, например, созданные из шаблонов AngularJS на grunt-angular-templates) компилируются Google Closure Compiler [2] в один файл с минимальным размером.Объединить исходные карты двух этапов компиляции

CoffeeScript ---[1]---> JavaScript --[2]--\ 
              \-> 
AngularJS templates --> JavaScript ----------> single minimized JS file 
              /-> 
        other JS files -------/ 

Оба этапа [1] и [2] создают исходные карты.

Возможно ли объединить эти исходные карты в одну карту источника, которая позволит мне отлаживать файлы CoffeeScript из веб-браузера, который запускает минимизированный JS-файл?

Другими словами: пусть говорят, что карта источника [1] представлена ​​функция:

f(position in CoffeeScript) = position in JavaScript 

и карта источника [2] представлена ​​функция:

g(position in JavaScript) = position in minimized JS 

I Желательно получить карту источника, которая представлена ​​функциональной композицией:

h(position in CoffeeScript) = g(f(position in CoffeeScript)) = 
          = position in minimized JS 

ответ

3

Как я могу лучше сказать из спецификация сходного кода карты (и другие дискуссии), многоуровневое отображение еще не определены

https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#heading=h.e8hx254xu4sa

Источник Карта Revision 3; Примечания к многоуровневому сопоставлению

Возможно, у кого-то есть инструменты для решения этой проблемы, возможно, в репозитории Github. Конечно, у вас есть как инструменты для создания таких карт, так и браузеры, которые могут их использовать.

https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/ https://github.com/fitzgen/source-map

+0

Ну, в моем прецеденте я действительно не забочусь о промежуточном файле, это просто побочный продукт ... в любом случае, ваш ответ по крайней мере говорит мне, что эта идея технически возможна с текущей реализацией исходных карт, и есть просто нет инструмента, который выполняет именно эту операцию. Спасибо. – liori

+0

Похож, что 'Grunt' может обрабатывать 2-х этапную карту, по крайней мере, в случае передачи одного скомпилированного' Coffeescript' через 'uglify' - https://github.com/gruntjs/grunt-contrib-uglify – hpaulj

+1

С боковой панели : http://stackoverflow.com/questions/15964826 – hpaulj

15

Попробуйте sorcery - он предназначен именно для этой цели (я автор, я пришел сюда в поисках информации о соответствующих инструментов). Пока файлы .map находятся в правильном месте (или в виде URI данных), вы просто запустите sorcery в сгенерированном файле, и он найдет промежуточные исходные карты и составит их.

+0

Привет, Rich, can пожалуйста, укажите пример использования вашего инструмента, например, с помощью глотки? Потому что это не очень очевидно из вашей документации по github, как это сделать. Заранее спасибо. – VladosJS

2

Closure Compiler теперь реализует --apply_input_source_maps--parse_inline_source_maps для загрузки). Это должно делать именно то, чего вы пытаетесь достичь здесь, никаких дополнительных инструментов не требуется.

+1

Никаких дополнительных инструментов не требуется, только если есть только две фазы преобразования кода. – liori

+0

@ liori Да, для установки, описанной в этом вопросе, не требуется инструментов. Но, как правило, до тех пор, пока все инструменты содержат все исходные карты в ряд, и все инструменты поддерживают чтение встроенных исходных карт (я знаю, что не все это делает, но это кажется разумной целью), This Should All Work (tm). –

-1

Пакет combine-source-map, оболочка Mozilla [source-map] выглядит как более популярная альтернатива [колдовству], как Rich Harris had recommended (2M против 32 тыс. Загрузок).

По собственному описанию на странице продукта, в зерноуборочных исходный карта:

источник Добавить карты нескольких файлов, смещение их, а затем объединить их в один источник карты.

После оценки слияния-исток-карт это выглядит многообещающе, даже если он работает только на основе системы источников файлов в исходных картах.Он сбой при использовании встроенных источников (может быть ограничение исходного кода из компилятора закрытия). С небольшими изменениями можно также правильно обрабатывать встроенные источники.