Карта исходного кода

Оригинальное название: source map

Коротко

Файл, который связывает каждую позицию в собранном или минифицированном коде с местом в исходниках, чтобы при отладке видеть оригинальные файлы и строки.

Что такое «Карта исходного кода»

Код, который отдаётся браузеру, часто мало похож на написанный: TypeScript и современный JavaScript прогоняют через транспилятор, десятки модулей склеивают в один файл, имена переменных сокращают до одной буквы, SCSS превращают в CSS. Ошибка в такой сборке указывает на «строку 1, столбец 48213», и это ничего не говорит. Карта исходного кода (source map) решает задачу: инструменты разработчика читают её, показывают исходный файл и строку и позволяют ставить точки останова прямо в нём.

Как устроен файл

Это JSON, обычно с расширением .map, рядом с собранным файлом:

{
  "version": 3,
  "file": "app.min.js",
  "sources": ["src/cart.ts", "src/api.ts"],
  "names": ["addToCart", "request"],
  "mappings": "AAAA,SAASA,UAAU..."
}

Поле mappings хранит закодированные в Base64 VLQ соответствия позиций, sources — список исходников, а необязательное sourcesContent может содержать их текст целиком. Браузер находит карту по комментарию в конце собранного файла — //# sourceMappingURL=app.min.js.map, в CSS — /*# sourceMappingURL=… */ — или по HTTP-заголовку SourceMap. Загружается она, только когда открыты инструменты разработчика.

Включение в сборке

Карты создаёт сборщик или компилятор: в Vite — параметр build.sourcemap, в webpack — devtool, у esbuild — флаг --sourcemap, в TypeScript — опция sourceMap в tsconfig.json. Dart Sass при компиляции в файл создаёт карты по умолчанию. Как пользоваться ими при пошаговой отладке — в статье про отладчик.

Выкладывать ли на рабочий сайт

Публичная карта с sourcesContent отдаёт любому желающему исходники проекта: структуру, комментарии, а иногда и забытые адреса внутренних сервисов. Поэтому на рабочем сервере карты либо не публикуют, либо создают «скрытыми» — без ссылки в собранном файле — и загружают только в систему отслеживания ошибок, чтобы та показывала понятные трассировки. Если карта всё же лежит рядом с файлом, стоит хотя бы закрыть доступ к *.map в настройках веб-сервера.

Обновлено:

Все термины раздела «Frontend»

Что будем искать? Например,Продвижение