Справочник
Сравнение
Обычный onErrorCaptured | <NuxtErrorBoundary> | vue-error-boundary-kit | |
|---|---|---|---|
| Fallback UI | строите сами каждый раз | слот #error | скоуп-слот fallback: error, reset, retry, retryCount, canRetry |
| Повтор / сброс | вручную | вручную | встроены resetKeys, resetOnPropsChange, maxRetries; createBackoffRetry() из retry-backoff для возрастающей задержки между попытками |
| Отчётность | вручную | вручную | адаптерный паттерн (console/http/sentry/bugsnag/logrocket/otel), tree-shaking по адаптеру, ровно один раз для вложенных границ |
| Защита от массовых сбоев | — | — | adapters/rate-limit — обёртка с дедупликацией и ограничением частоты для любого репортера |
| Хлебные крошки | — | — | adapters/breadcrumbs — скользящий трейл событий, opt-in, прикрепляется к отчётам через withBreadcrumbs() |
| Повтор TanStack Query | ручная настройка resetQueries() | ручная настройка resetQueries() | useQueryErrorReset() из tanstack-query — один вызов, подключается к beforeReset |
| История отладки | — | — | /devtools — createErrorHistory() + <ErrorHistoryPanel> |
| Программное использование | — | — | useErrorBoundary() |
За пределами errorCaptured | — | — | useGlobalErrorCapture() (опционально, отдельная точка входа) |
| Модуль Nuxt | — | есть | vue-error-boundary-kit/nuxt — автоматически регистрирует <ErrorBoundary> + автоимпорты; useNuxtErrorBoundary() также перехватывает то, что ускользает из любой границы, через собственные хуки Nuxt vue:error/app:error |
| Ошибки vue-router | не видны onErrorCaptured вообще | не видны onErrorCaptured вообще | useRouterErrorBoundary() из router — перехватывает ошибки navigation guard и асинхронных компонентов маршрута через router.onError() |
| Помощники для тестов | строите сами каждый раз | строите сами каждый раз | vue-error-boundary-kit/testing — компоненты, бросающие ошибку по требованию, билдер фикстуры CapturedError, framework-агностичный записывающий репортер |
| Suspense + граница ошибок вместе | вкладываете <Suspense> и свою границу вручную | вкладываете <Suspense> и <NuxtErrorBoundary> вручную | <AsyncBoundary> из async-boundary — один компонент, слоты default/loading/fallback |
| SSR | работает, без замены fallback | работает, без замены fallback | работает, без замены fallback (см. заметки о SSR — это ограничение архитектуры Vue, не специфичное для любого из этих подходов) |
| Стоимость бандла | 0 | часть Nuxt | ~2.1 кБ gzip ядро; адаптеры/devtools — отдельные точки входа |
| Готовность к Vapor-режиму | Н/Д | зависит от Nuxt | использует только официальные onErrorCaptured/h() — никаких внутренних API VDOM-рендерера |
Не вошло в v1: полноценный кастомный инспектор для расширения Vue Devtools (тот же функционал закрывает <ErrorHistoryPanel> из этого пакета, не добавляя @vue/devtools-api в зависимости).
Лицензия
MIT