Source maps — это механизм, позволяющий связывать скомпилированный или транспилированный код с исходным. В контексте фреймворка Fresh они особенно полезны при разработке приложений на Deno и TypeScript, где часто используется транспиляция и минимизация кода. Source maps обеспечивают прозрачность дебага, позволяя видеть реальные исходники в инструментах разработчика.
Source map представляет собой JSON-файл, который содержит информацию о соответствии между строками и колонками исходного кода и сгенерированного JavaScript. В Deno и Fresh source maps создаются автоматически для TypeScript-файлов, если включена соответствующая опция компилятора. Основные поля файла source map:
version — версия формата source map.file — имя сгенерированного файла.sources — массив исходных файлов.sourcesContent — массив содержимого исходных
файлов.mappings — строка с закодированными данными о
позициях.names — список идентификаторов переменных и
функций.С помощью этих данных дебаггер браузера или IDE может корректно отображать исходный код, даже если исполняется минифицированный или транспилированный файл.
По умолчанию Fresh генерирует source maps для всех TypeScript и JSX
файлов при запуске сервера в режиме разработки. Для ручной настройки
используются следующие параметры в deno.json:
{
"compilerOptions": {
"sourceMap": true,
"inlineSources": true
}
}
sourceMap: true — генерирует отдельные
.map файлы.inlineSources: true — включает исходный код прямо в
source map, что облегчает отладку без необходимости хранить отдельные
файлы.Для JSX компонентов Fresh автоматически создает source maps при
трансформации .tsx файлов в .js, благодаря
интеграции с Deno компилятором.
В браузере source maps позволяют:
В инструментах разработчика Chrome или Firefox можно видеть исходные
.ts и .tsx файлы, проставлять breakpoints и
просматривать значения переменных в реальном времени.
.tsx компонентах, а не в
итоговом JS..ts файл..map файлы с ограниченным
доступом..tsx код без потери информации.При создании компонента Button.tsx:
export default function Button(props: { label: string }) {
return <button>{props.label}</button>;
}
После запуска deno task start Fresh создаёт файл
Button.js и соответствующий Button.js.map. В
Chrome DevTools можно открыть исходный Button.tsx,
поставить breakpoint и увидеть props.label в реальном
значении при клике. Даже если JS минифицирован, source map сохранит
связь с исходным кодом.
Source maps в Fresh — это не просто удобство, а критически важный инструмент для контроля над качеством и отладкой как клиентского, так и серверного кода. Их правильная настройка и использование ускоряет разработку и значительно упрощает диагностику ошибок.