предисловие
В качестве фронтенда вы часто сталкиваетесь с такой ситуацией:
Клиент: Почему я не вижу данные на этой странице? ?
Я: (торопливо открываю сайт), данные на моей стороне показывают нормально!
Клиент: Нет! Я не могу видеть это здесь!
Я: (бессвязно), но я... я здесь нормальный
Клиент: БАЛАБАЛА
Я считаю, что все фронтендеры часто сталкиваются с такими проблемами.Очевидно, что все нормально, когда вы открываете свою машину, но когда вы доходите до клиента, проблем много, и вы не можете локализовать проблему на месте. все Вы не можете попросить клиента открыть его.F12Проверьте консоль, чтобы увидеть, что не так! Поэтому в этой статье в основном рассказывается о том, какvueа такжеsentryВ сочетании для достижения эффекта мониторинга в реальном времени и сбора журналов ошибок.
не знаю
sentry? Посмотрите мою последнюю статьюПомните процесс развертывания Sentry
Первоначальная комбинация Vue и Sentry
ПостроитьSentryПосле этого нажмите «Создать проект», выберитеBrowser -> Vue, после завершения создания вы можете следовать подсказкам внутри илиОфициальный сайтучебник для работы, шаги следующие:
// 安装官方提供的库
yarn add @sentry/browser
yarn add @sentry/integrations
существуетmain.jsДобавьте следующий код в файл
import * as Sentry from '@sentry/browser'
import * as Integrations from '@sentry/integrations'
Sentry.init({
dsn: 'http://<publickey>:<secretkey>@xxx.xxx.xxx.xxx:9000/<project id>',
integrations: [
new Integrations.Vue({
Vue,
attachProps: true
})
]
})
// 关于 DSN 我在上一篇有介绍到
После добавления мыnpm run devДавайте посмотрим, просто сделайте ошибку где-нибудь в компоненте
Тогда давайте откроем его и посмотрим, был ли собран этот журнал ошибок, в случае успеха он должен выглядеть следующим образом.
Указывает, что ошибка, которую мы только что вызвали, былаsentryСнято успешно. Нажмите, чтобы просмотреть подробности.
можно увидеть ошибкуthis.aa is not a function, так что мы изначально успешноvueа такжеsentryкомбинированный
Комбинация исходной карты
Выше мы успешноvueинтегрирован вsentryИ поймал ошибку, но не нашел проблему, хотя мы и знаем содержание ошибки, но не знаем, в какой строке какого компонента она находится. Это потому, что использованиеwebpackФайл js будет сжат и перепутан в процессе упаковки, поэтому, чтобы точно определить ошибку, нам нужноsourcemapтакже загрузитьsentryРазбор, вот два способа, можноОфициальный сайтПосмотреть информацию в
sentry-cli
@sentry/webpack-plugin
Здесь я выбираюsentry-cliЧтобы сделать,@sentry/webpack-pluginОн в основном используется для загрузки копии одновременно с пакетом webpack.sourcemapприбытьsentry
Установить глобально@sentry/cli
npm i -g @sentry/cli
После завершения установки войдите на веб-сайт для созданияauth token, Конкретные шаги заключаются в следующем:
нажмите账号->API keys, нажмитеCreate New Token
Следуйте схеме ниже, помнитеproject:releasesа такжеproject:writeтикать
сборка завершенаtokenПосле этого можно перейти к следующему шагу, войти в корневую директорию проекта и выполнить
sentry-cli --url http://xxx.xxx.xxx.xxx:9000 login
Здесь, потому что мы успешно сгенерировали вышеauth token, поэтому введитеnВам будет предложено ввести токен прямо сейчас, и настройка завершена.
Далее мыsentryСначала установите номер версии для вашего проекта, чтобы он знал, где его искать.sourcemapразбирать
# sentry-cli releases -o 组织名 -p 项目名 new 版本号
sentry-cli releases -o sentry -p vue new pro@1.0.1
# Created release pro@1.0.1.
Название организацииВы можете увидеть в своей учетной записи, что была создана новая версия, мы можем открыть веб-сайт, чтобы увидеть, что номер версии, которую мы только что создали, уже существует.
Тогда нам нужноmain.jsМодифицируем нашу конфигурацию в файле
Sentry.init({
dsn: 'http://<publickey>:<secretkey>@xxx.xxx.xxx.xxx:9000/<project id>',
release: 'pro@1.0.1', // 新增加的+
integrations: [
new Integrations.Vue({
Vue,
attachProps: true
})
]
})
После завершения настройки выполнитеnpm run buildупаковать, а затемsourcemapзагрузить наsentry
sentry-cli releases -o 组织名 -p 项目名 files 版本号 upload-sourcemaps 打包后js的目录 --url-prefix 线上js访问地址
sentry-cli releases -o sentry -p vue files dev@1.0.1 upload-sourcemaps dist\static\js --url-prefix ~/static/js
обращать внимание! !,это--url-prefixэто путь, по которому вы получаете доступ к файлу js в Интернете,~Это корневой каталог вашего сайта, например, статические файлы моего сайта выглядят такhttp://192.168.144.163:8080/static/js/xxxx.js, то правильно заполнить приведенный выше пример, потому что корневая директория моего сайтаhttp://192.168.144.163:8080, после успешной загрузки вы можетеReleases -> Artifactsувидеть файл, который вы только что загрузили
Просто запустите один локальноnginxконфигурации, потому что вdevсреда недоступнаsourcemap, так и должно бытьprodЕго можно протестировать только в среде, продолжайте просто вызывать ошибку, проверьте на веб-сайте, вы найдете больше возможностей для просмотра исходного кода.
Чтобы мы могли успешно перейти к конкретным проблемам, которые возникают, какую строку в файле, файл карты вы хотите удалить, вы можете выполнить
sentry-cli releases -o 组织名 -p 项目名 files 版本号 delete --all
sentry-cli releases -o sentry -p vue files dev@1.0.1 delete --all
В общем, сделаноvueа такжеsentryКомбинация дегтя в бочке меда может заключаться в том, что каждый раз, когда вы выпускаете версию, вам может потребоваться один раз вручную загрузить файл исходной карты.Если вам интересно, вы можете изучить плагин веб-пакета.@sentry/webpack-plugin, и загрузите его вsentryидти.
возможные проблемы
Одной из проблем, которая занимает много времени, является загрузкаsourcemapВо время файловых операций это--url-prefixЗначение файла должно быть точным, и его не нужно заключать в кавычки.Следует отметить, что если файл загружается успешно, но конкретная строка все еще не отображается, большинство причин все же возможны.sourcemapАдрес файла неверен, в результате чего он недоступен, поэтому его нельзя разобрать, обратите на это внимание!
резюме
После завершения построения, если есть ошибка, мы можем собрать ее в режиме реального времени и увидеть конкретные детали ошибки, проанализировать, а затем устранить проблему, что очень полезно для некоторых случайных ошибок.sentryВсе, что можно сделать, это найти проблемы, возникающие в вашем коде, а для бизнес-ошибок нужно фиксировать их какими-то другими методами!
Если у вас есть какие-либо вопросы, пожалуйста, оставьте сообщение ниже и постарайтесь ответить. На ошибки в тексте просьба указывать!