После сборки и минификации имена функций и номера строк в стеке могут мало говорить об исходном коде. Загрузите source maps, чтобы Tracer мог восстановить исходные имена и места ошибок.
Загружайте source maps для каждой версии приложения, ошибки которой вы хотите анализировать.
Пути к файлам в архиве должны совпадать с путями в стектрейсе, без учёта хоста.
Например, путь до файла выглядит так:
Error at (https://some-host.ru/someFolder/someScript.hash.js)
Значит, в архиве с сорсмапами должна быть структура:
someFolder - someScript.hash.js.map
Используйте то же versionName, что и в конфигурации модуля отправки JS SDK. versionCode необязателен; если вы задаёте его явно, значения при отправке событий и source maps должны совпадать. Загрузка source maps выполняется отдельным пакетом @apptracer/sourcemap в Node.js, вне браузерного приложения.
Устанавливаем npm модуль:
npm install @apptracer/sourcemap --save-dev
После сборки отправляем сорсмапы:
const { uploadSourceMap } = require('@apptracer/sourcemap'); // sourcemapsPath — папка с source maps; все .map-файлы попадут в архив. uploadSourceMap(sourcemapsPath, { sourcemapToken: PLUGIN_TOKEN, // pluginToken из настроек проекта в Tracer versionName: VERSION_NAME, // версия приложения (строка), как в настройках SDK }).catch((error) => { console.error(error); process.exitCode = 1; });
uploadSourceMap() возвращает Promise<void>, который завершается после ответа сервера. При ошибке Promise отклоняется.
В примерах ошибка загрузки устанавливает код завершения процесса 1, чтобы сборка в CI завершилась с ошибкой.
В переменной окружения PLUGIN_TOKEN задайте pluginToken из настроек проекта в Tracer, а в VERSION_NAME — ту же версию приложения, что и в настройках SDK. Замените build/sourcemaps на путь к вашей папке с source maps:
pushd 'build/sourcemaps' zip -9 -r file.zip . -i '*.map' echo 'Заливаем sourcemaps...' curl \ -F sourcemapToken=${PLUGIN_TOKEN} \ -F versionName=${VERSION_NAME} \ -F file=@file.zip \ https://plugin-api.apptracer.ru/api/sourcemap/upload rm file.zip popd