получить источник исходного кода в браузере - PullRequest
2 голосов
/ 05 марта 2020

у меня window.onerror и ловлю некоторые исключения. Но проблема в том, что трассировка стека находится в JS, который скомпилирован из другого языка (ClojureScript). Таким образом, трассировки стека с номерами строк находятся в скомпилированном виде. Вопрос: как конвертировать стек в исходный код в браузере? Как мы видим, браузер уже может использовать сопоставленные источники в отладчике. (Мы используем только Chrome)

1 Ответ

0 голосов
/ 06 марта 2020

ClojureScript поддерживает исходные карты. По умолчанию компилятор ClojureScript отправляет файлы исходных карт только для сборок разработки. Основываясь на вашем описании, ваш файл ClojureScript был скомпилирован для производства. Существует два способа решения вашей проблемы:

  • создание исходных карт для производственной сборки,
  • включение режима отладки для производственной сборки (рекомендуется).

Создание исходных карт для производственной сборки

Поскольку вы запрашиваете исходные карты, вот как их получить. Если у вас есть доступ к исходному коду, вы можете установить соответствующий параметр компилятора, чтобы включить исходные карты и для производственной сборки:

Вот минимальный конфигурация для включения исходных карт в производственном режиме:

  • для shadow-cljs
{:builds {:app {:target  :browser
                :release {:compiler-options {:source-map true}}}}}
  • для cljsbuild
{:cljsbuild {:builds [{:id       "production"
                       :compiler {:optimizations :advanced
                                  :source-map    true}}]}}

Включение режима отладки для производственной сборки (рекомендуется)

Компилятор ClojureScript также получил функцию под названием :pseudo-names, предназначенную для решения этой указанной c проблемы. Из документации ClojureScript :

Измените свою производственную сборку, чтобы использовать две дополнительные опции (компилятора) :pseudo-names true и :pretty-print true. Теперь ваша ошибка покажет имя, которое соответствует имени в исходном источнике.

То же, что и выше, вот пример:

  • Для cljsbuild
{:cljsbuild {:builds [{:id       "production-debug"
                       :compiler {:optimizations :advanced
                                  :pseudo-names  true
                                  :pretty-print  true}}]}}
  • Для shadow-cljs вы можете напрямую запустить:
shadow-cljs release app --debug

Если у вас нет доступа к исходному коду, было бы разумнее обратиться напрямую к сопровождающему. Режим производственной сборки ClojureScript создает компактный код, который должен быть как можно меньшим и максимально быстрым, чтобы его не читали и не отлаживали люди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...