Объединить исходные карты двух этапов компиляции
У меня есть двухэтапный процесс компиляции для моего веб-приложения. Во-первых, я компилирую файлы 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
Ответы
Ответ 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 будет:
Добавьте исходные карты нескольких файлов, смещайте их, а затем объедините их в одну исходную карту.
После оценки карт-слияний-источников это выглядит многообещающим, хотя он обрабатывает только источники на основе файловой системы в исходных картах. Он сбой при использовании встроенных источников (может быть ограничение исходного кода из компилятора закрытия). С некоторыми изменениями можно также правильно обрабатывать встроенные источники.