Ошибки? на производстве? Обработка исключений является основным требованием для приложения. Как мы справляемся с неизвестными загадочными ошибками, которые возникают только у определенного пользователя, машины или браузера?
Он работает на моей машине, а почему не на твоей?
Как воспроизвести?
- Разработчики
Наша команда обсуждает метод. Как мы делаем это ? Затем Google показал мне это https://stackoverflow.com/questions/21403895/does-a-crashlytics-like-service-for-web-app-exists. Почему бы нам не попробовать.
Мы выбрали Sentry. Прямая документация. Интеграция со многими платформами. Простая настройка и многое другое.
Их документация хороша, но нам пришлось копнуть глубже, чтобы это сделать. Как мы сделали ?
Поймем ошибки
Создал учетную запись (бесплатную учетную запись разработчика) в Sentry. Выберите Vue в качестве платформы (отфильтруйте ее, если она недоступна). Дайте название проекту и команде. Вы готовы выдать ошибку.
Установите @sentry/browser с помощью NPM (—-save) или Yarn.
в main.js вставьте следующее для базовой настройки.
import * as Sentry from '@sentry/browser'
Sentry.init({
dsn: 'https://[email protected]/00000000',
integrations: [new Sentry.Integrations.Vue({ Vue })]
})
Если вы хотите использовать config.errorHandler, см. Проблему на StackOverflow
Копаем глубже, чтобы получить больше возможностей
Играем, сторожевой разблокируется.
Среды
Проблемы можно фильтровать в зависимости от среды. Добавлена новая переменная .env * VUE_APP_ENV=production
* Чтобы читать переменные среды из Vue. Переменные должны иметь префикс VUE_APP_.
Sentry.init({
dsn: 'https://[email protected]/00000000',
integrations: [new Sentry.Integrations.Vue({ Vue })],
environment: process.env.VUE_APP_ENV
})

После добавления ключа «среда» в Sentry.init Sentry дает нам возможность фильтровать и создавать отчеты на основе среды. А также, когда Ошибка была впервые замечена и замечена в последний раз.
Релизы
Фильтрация проблем по выпускам версий продукта. Например, 0.0.2 имеет проблему, но не 0.0.1. Он также служит еще одной важной цели, связывая конкретный выпуск с конкретным коммитом, что облегчает нашу жизнь.
Базовая настройка
Sentry.init({
dsn: 'https://[email protected]/1354918',
integrations: [new Sentry.Integrations.Vue({ Vue })],
environment: process.env.VUE_APP_ENV,
release: process.env.VUE_APP_SENTRY_RELEASE
})

Расширенная настройка
Git Commit Hash (git rev-parse HEAD) как Sentry Release.
Добавление данных о выпуске вручную утомительно. Итак, мы добавили хеш-данные фиксации в качестве нашей версии выпуска.
Как мы это сделали?
на package.json добавил новый скрипт и экспортировал переменную env.
{
"name": "sentryTest",
"version": "0.0.1",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"build-sentry": "export VUE_APP_SENTRY_RELEASE=$(git rev-parse HEAD) && npm run build",
},
...
}
Плагин Webpack для загрузки артефактов (исходный код)

С webpack код будет бессмысленным, когда дело доходит до отладки.
Для этой проблемы Sentry предлагает решение в виде плагина. Установил как зависимость от разработчика.
npm install --save-dev @sentry/webpack-plugin
и настройте его на vue.config.js. Устанавливаем только в производственной и постановочной среде.
module.exports = {
productionSourceMap: false,
configureWebpack: config => {
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'staging') {
config.plugins.push(new SentryPlugin({
release: process.env.VUE_APP_SENTRY_RELEASE,
include: './dist',
ignore: ['node_modules', 'webpack.config.js']
}))
}
}
}
это оно. Когда мы будем строить в следующий раз,

После сборки мы получили значимые исключения. Что нас было легко идентифицировать.

Тогда у нас был полный контроль над ошибками в нашем приложении.
PS: переключив productionSourceMap на true в vue.config.js, он генерирует исходные карты для блоков (приложение + поставщики), а также добавляет их в папку dist. Что нежелательно и не видно публике.