Подтвердить что ты не робот

Объединить исходные карты двух этапов компиляции

У меня есть двухэтапный процесс компиляции для моего веб-приложения. Во-первых, я компилирую файлы 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

Я хотел бы получить исходную карту, которая представлена ​​функцией:

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

Ответ 1

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

Ответ 2

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

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

Source Maps Revision 3; Заметки о многоуровневых сопоставлениях

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

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

Ответ 3

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

Ответ 4

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

По собственному описанию страницы продукта, comb-source-map будет:

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

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