Source maps — это технология, позволяющая сопоставлять скомпилированный, минифицированный или транспилированный JavaScript-код с исходным исходником. Это критически важно для отладки, особенно при работе с современными сборщиками вроде Webpack, Rollup или Babel, где исходный код часто трансформируется.
Source map представляет собой файл в формате JSON, который содержит:
Механизм работы выглядит следующим образом:
Mappings — ключевая часть source map. Она закодирована с помощью VLQ (Variable-length quantity), что позволяет компактно хранить информацию о позициях:
;.,.Пример структуры mappings (человеческий вид, без кодировки VLQ):
generatedLine: 1 -> source: file1.js, originalLine: 3, originalColumn: 0
generatedLine: 2 -> source: file1.js, originalLine: 4, originalColumn: 2
Webpack поддерживает разные уровни source maps через
опцию devtool:
eval — быстрый вариант, исходники встроены в код,
низкая точность.source-map — полноценная отдельная карта, точная, но
медленнее.cheap-module-source-map — компромисс между скоростью и
точностью, игнорирует колонки.Rollup также позволяет генерировать source maps
через опцию output.sourcemap:
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
sourcemap: true
}
};
Когда включены source maps, браузерные инструменты разработчика позволяют:
Важно: для корректной работы DevTools путь к исходным файлам должен совпадать с указанным в source map.
Umbrella JS — это лёгкая библиотека для работы с DOM, похожая на
jQuery. Она часто распространяется в минифицированной форме
(umbrella.min.js), что делает использование source maps
особенно полезным:
umbrella.min.js.map позволяет видеть
исходный код методов Umbrella JS.<script src="umbrella.min.js"></script> браузер
автоматически подхватывает карту, если она указана в конце файла://# sourceMappingURL=umbrella.min.js.map
.find(), .on(), .css() и других,
несмотря на минификацию.//# sourceMappingURL=имя_карты.js.map.sources и
sourcesContent.Source maps являются критически важным инструментом для поддержания читаемости, отладки и анализа современных фронтенд-проектов, особенно при использовании минифицированных библиотек вроде Umbrella JS.