Поле inlineSourcesContent
Параметр **inlineSourcesContent** в конфигурации SWC управляет тем, будет ли исходный код включаться внутрь генерируемых source map или оставляться вне их. Это один из ключевых механизмов, влияющих на удобство отладки, размер сборки и безопасность распространения исходников.
## Назначение поля inlineSourcesContent
Source map в SWC служит связующим звеном между скомпилированным JavaScript-кодом и исходным кодом, написанным разработчиком. Внутри source map хранится информация о соответствиях строк, столбцов и файлов.
Поле **inlineSourcesContent** определяет поведение поля `sourcesContent` внутри source map:
* если включено — исходные файлы вставляются прямо в map;
* если отключено — source map содержит только ссылки на исходники без их содержимого.
Это напрямую влияет на структуру итогового `.map` файла и возможности инструментов разработки.
## Формат и расположение в конфигурации SWC
В SWC настройка обычно задаётся в разделе генерации source map:
```json
{
"jsc": {
"target": "es2020"
},
"sourceMaps": true,
"inlineSourcesContent": true
}
```
Также поле может быть частью расширенных конфигураций, где управление source map вынесено отдельно или комбинируется с другими параметрами генерации.
## Поведение при включённом inlineSourcesContent
При значении `true` SWC помещает содержимое каждого исходного файла прямо в поле `sourcesContent` внутри source map.
Структура source map в этом случае включает:
* список исходных файлов (`sources`)
* содержимое каждого файла (`sourcesContent`)
* mapping между оригинальным и сгенерированным кодом
Пример упрощённой структуры:
```json
{
"version": 3,
"file": "bundle.js",
"sources": ["src/index.js"],
"sourcesContent": [
"const sum = (a, b) => a + b;"
],
"mappings": ";;;;;AAAA"
}
```
### Особенности такого режима:
* отладка возможна без доступа к файловой системе;
* DevTools браузера могут восстанавливать исходный код полностью;
* увеличивается размер `.map` файлов;
* упрощается диагностика ошибок в удалённых окружениях.
## Поведение при отключённом inlineSourcesContent
При значении `false` SWC исключает содержимое исходных файлов из source map.
В результате:
* поле `sourcesContent` отсутствует или пустое;
* DevTools пытаются загружать исходники по путям из `sources`;
* требуется доступ к оригинальным файлам (локально или через сервер исходников).
Пример структуры:
```json
{
"version": 3,
"file": "bundle.js",
"sources": ["src/index.js"],
"mappings": ";;;;;AAAA"
}
```
### Особенности такого режима:
* значительно уменьшается размер source map;
* повышается безопасность (исходный код не распространяется вместе с билдом);
* отладка зависит от наличия исходников в окружении разработчика.
## Влияние на производительность и размер сборки
При больших проектах разница становится заметной:
### Включённый inlineSourcesContent
* увеличивает размер `.map` файлов пропорционально размеру исходников;
* повышает нагрузку на передачу артефактов (CI/CD, CDN);
* ускоряет локальную отладку.
### Отключённый inlineSourcesContent
* уменьшает общий размер артефактов сборки;
* снижает сетевые затраты при деплое;
* может усложнить диагностику ошибок в production.
## Поведение в браузерных DevTools
DevTools используют поле `sourcesContent` как приоритетный источник восстановления исходного кода.
При наличии inline content:
* исходники отображаются мгновенно;
* не требуется дополнительная загрузка файлов;
* корректно работают breakpoints даже без исходного сервера.
При отсутствии inline content:
* браузер пытается загрузить файлы по `sources`;
* при отсутствии доступа отображается только скомпилированный код;
* debugging experience зависит от настройки сервера и путей.
## Связь с безопасностью
Поле **inlineSourcesContent** часто рассматривается в контексте утечки исходного кода.
### Потенциальные риски:
* попадание бизнес-логики в публичные source map;
* возможность восстановления архитектуры приложения;
* раскрытие комментариев и вспомогательных функций.
Поэтому в production-сборках нередко применяют:
* `inlineSourcesContent: false`
* генерацию source map только для внутренних окружений
* отдельное хранение `.map` файлов вне публичного доступа
## Взаимодействие с другими настройками SWC
### sourceMaps
Без включённого `sourceMaps: true` поле inlineSourcesContent не имеет смысла, так как source map не генерируется.
### minify
При минификации влияние inlineSourcesContent сохраняется: map может быть маленьким по структуре, но содержать полный исходный код, что увеличивает итоговый размер.
### jsc.parser и трансформации
Преобразования AST не влияют напрямую на inlineSourcesContent, но изменяют содержимое, которое может быть включено в map.
## Практические сценарии использования
### Локальная разработка
Чаще всего используется:
```json
{
"sourceMaps": true,
"inlineSourcesContent": true
}
```
Позволяет полностью воспроизводить исходный код в браузере без дополнительной инфраструктуры.
### CI/CD сборка
Часто применяется:
```json
{
"sourceMaps": true,
"inlineSourcesContent": false
}
```
Снижает размер артефактов и исключает утечку исходников.
### Debug сборки
Иногда используется гибридный подход:
* inlineSourcesContent включён только для staging;
* production сборка полностью отключает содержимое.
## Ограничения и особенности реализации в SWC
* SWC не всегда различает частичные source map сценарии на уровне отдельных модулей;
* inlineSourcesContent применяется глобально ко всему бандлу;
* поведение может отличаться в зависимости от интеграции (webpack, next.js, rspack);
* при транспиляции больших monorepo влияние на размер map становится критичным.
## Типичные ошибки при использовании
### Ожидание уменьшения размера map при включённом параметре
Частая ошибка — ожидание, что inlineSourcesContent не влияет существенно на размер. На практике он может удваивать или утраивать размер source map.
### Потеря отладки в production
При отключении параметра без альтернативного хостинга source map возникает ситуация, когда DevTools не могут восстановить исходники.
### Несогласованность окружений
Разные значения inlineSourcesContent в dev и prod приводят к различному поведению breakpoints и stack traces.
## Оптимизационные стратегии
Для крупных приложений применяются следующие подходы:
* разделение конфигураций SWC по окружениям;
* генерация external source maps с загрузкой по требованию;
* хранение map файлов в защищённом storage;
* использование sourcemap fallback только для internal debugging;
* отключение inlineSourcesContent в публичных релизах при сохранении доступности внешних map.