Source Maps — это файлы, которые создаются при трансформации исходного кода, например, при использовании TypeScript, JSX или минимизации JavaScript. Они позволяют отлаживать исходный код в браузере, несмотря на то, что выполняется уже скомпилированный или минифицированный код.
Ключевые моменты:
Для проектов на Preact, особенно тех, которые используют Vite, настройка Source Maps выполняется через конфигурацию сборщика.
Пример настройки Vite для Preact с Source Maps:
import { defineConfig } from 'vite';
import preact from '@preact/preset-vite';
export default defineConfig({
plugins: [preact()],
build: {
sourcemap: true, // включение генерации Source Maps
},
server: {
sourcemap: true // включение Source Maps для dev-сервера
}
});
Особенности:
sourcemap: true позволяет отлаживать как во
время разработки, так и после сборки для продакшн-версии.tsconfig.json включен параметр
"sourceMap": true.Preact сохраняет большинство принципов React, включая виртуальный DOM и хуки. Это накладывает некоторые особенности на отладку.
1. Использование DevTools
Preact поддерживает Preact Developer Tools для Chrome и Firefox. Они позволяют:
2. Breakpoints и консоль
console.log,
console.error, console.warn, но Source Maps
повышают точность локализации ошибок.function Button({ label }) {
console.log('Рендер компонента Button', label);
return <button>{label}</button>;
}
3. Отслеживание перерендеров
useEffect для
логирования рендеров:import { useEffect } from 'preact/hooks';
function Counter({ count }) {
useEffect(() => {
console.log('Counter обновлён:', count);
});
return <div>{count}</div>;
}
window.addEventListener('error', (event) => {
console.error('Глобальная ошибка:', event.error);
});
window.addEventListener('unhandledrejection', (event) => {
console.error('Необработанный Promise:', event.reason);
});
Source Maps и грамотная отладка становятся фундаментом для разработки масштабируемых Preact-приложений, особенно когда проект растет и количество компонентов увеличивается. Они позволяют быстро локализовать ошибки, понять поведение компонентов и анализировать производительность без потери прозрачности исходного кода.