Налагодження та усунення несправностей
Систематичні підходи до налагодження та рішення для поширених проблем розробки платформи Ring.
🔍 Стратегії налагодження
Проблеми середовища розробки
Конфлікти версій Node.js
Перевірити версію Node.js Використати Node Version Manager
node --version # Має бути 18.x або вище
nvm install 18
nvm use 18
Проблеми встановлення пакетів
Очистити кеш npm Видалити node_modules та перевстановити
npm cache clean --force
rm -rf node_modules package-lock.json
npm install
🚨 Поширені помилки збірки
Помилки TypeScript
// Помилка: Property 'user' does not exist on type 'Session | null'
// Рішення: Додати правильні type guards
if (session?.user) {
console.log(session.user.name) // ✅ Безпечний доступ
}
Проблеми збірки Next.js
Очистити кеш Next.js Перебудувати
rm -rf .next
npm run build
🔧 Налагодження під час виконання
React DevTools
- Встановіть розширення браузера React Developer Tools
- Використовуйте вкладку Components для перевірки стану компонентів
- Використовуйте Profiler для ідентифікації проблем продуктивності
Налагодження через консоль
// Структуроване логування
console.log('🔍 Debug:', { userId, entityId, timestamp: Date.now() })
// Умовне налагодження
if (process.env.NODE_ENV === 'development') {
console.log('Інформація налагодження тільки для розробки')
}
Налагодження мережі
// Налагодження викликів API
const response = await fetch('/api/entities', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
})
console.log('Відповідь API:', {
status: response.status,
headers: Object.fromEntries(response.headers),
url: response.url
})
🗄️ Проблеми бази даних
Проблеми підключення Firestore
// Перевірити підключення Firestore
import { db } from '@/lib/firebase'
import { doc, getDoc } from 'firebase/firestore'
try {
const testDoc = await getDoc(doc(db, 'test', 'connection'))
console.log('✅ Firestore підключено')
} catch (error) {
console.error('❌ Не вдалося підключитися до Firestore:', error)
}
Проблеми аутентифікації
// Налагодження сесії Auth.js
import { auth } from '@/auth'
export default async function DebugPage() {
const session = await auth()
return (
<pre>{JSON.stringify(session, null, 2)}</pre>
)
}
🔄 Налагодження продуктивності
Проблеми продуктивності React
// Використати React Profiler
import { Profiler } from 'react'
function onRenderCallback(id, phase, actualDuration) {
console.log('Рендер компонента:', { id, phase, actualDuration })
}
<Profiler id="EntityList" onRender={onRenderCallback}>
<EntityList />
</Profiler>
Аналіз бандлу
Проаналізувати розмір бандлу Перевірити великі залежності
npm run build
npm run analyze
npx webpack-bundle-analyzer .next/static/chunks/
🚀 Налагодження в продакшені
Відстеження помилок
// Інтеграція Sentry
import * as Sentry from '@sentry/nextjs'
Sentry.captureException(error, {
tags: {
component: 'EntityCreation',
userId: session?.user?.id
}
})
Моніторинг продуктивності
// Відстеження Web Vitals
export function reportWebVitals(metric) {
console.log(metric)
// Надіслати до аналітики
if (metric.label === 'web-vital') {
gtag('event', metric.name, {
value: Math.round(metric.value),
event_label: metric.id
})
}
}
Повна документація налагодження незабаром.