Исходные карты / артефакты Sentry не работают
Я создаю, минимизирую и генерирую исходные карты моего приложения с помощью веб-пакета. Артефакты отправляются на sentry.io с помощью webpack-sentry-plugin.
Код JavaScript запускается из localhost:8080/js/app.js
, Это содержит //# sourceMappingURL=app.js.map
в конце. Исходные карты работают правильно на Chrome devtools.
Релизы / Артефакты Sentry содержат следующие файлы:
js/app.js
js/app.js.map
В любом случае, когда Sentry регистрирует ошибку, stacktrace находится из уменьшенного файла. Он не использует исходные карты.
Что я делаю неправильно в моей настройке? Или какую другую информацию я должен дать, чтобы получить помощь?
1 ответ
Я разместил этот вопрос на forum.sentry.io и получил ответ от парня по имени @benvinegar.
Дело в том, что при отправке исходной карты / артефакта мы предоставляем файл, а также имя файла. Под именем файла подразумевается полный URL-адрес, на котором будет размещена исходная карта, если она была загружена на хост вместе с минимизированными файлами JS. То есть: если наш уменьшенный Javascript находится по адресу www.example.com/js/app.js
, тогда имя файла карты источника / артефакта должно быть www.example.com/js/app.js.map
, В противном случае мы можем назвать это ~/js/app.js.map
если мы хотим, чтобы исходная карта применялась в других ситуациях, таких как запуск приложения в localhost:8080/js/app.js
,
Как я использую webpack-sentry-plugin
, это просто вопрос добавления следующего свойства к плагину:
{
plugins: [
new SentryPlugin({
filenameTransform: filename => '~/' + filename
})
]
}
В нашем случае это не сработало долгое время.
Кажется, все просто отлично. Артефакты загружены, версии помечены, ошибки зарегистрированы, но нет исходных карт.
Суть вопроса: мы сами размещаем Sentry, а часовой разделен на разные контейнеры. Они не правильно поделились данными.
Одним из решений является обмен данными между контейнерами (см. Этот пост) или даже загрузка исходных карт на сервер S3, и Sentry также может работать с этим.