SWC поддерживает конфигурацию через package.json, позволяя
централизованно управлять поведением компиляции без необходимости
выделять отдельные конфигурационные файлы. Такой подход особенно удобен
в монорепозиториях и проектах, где важно уменьшить количество точек
конфигурации и стандартизировать сборочный процесс.
Основной механизм настройки заключается в добавлении поля
swc в корневой package.json. Внутри него
описывается конфигурация, аналогичная .swcrc, но встроенная
в структуру проекта.
{
"name": "example-project",
"version": "1.0.0",
"swc": {
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": false
},
"target": "es2020"
},
"module": {
"type": "es6"
}
}
}
При наличии одновременно .swcrc и package.json
с полем swc, поведение зависит от используемого
инструмента: чаще всего приоритет отдаётся .swcrc, однако
многие интеграции позволяют явно переключать источник конфигурации.
Конфигурация делится на несколько ключевых секций:
jsc — настройки JavaScript/TypeScript компиляции
module — управление системой модулей
minify — параметры минификации
sourceMaps — генерация source maps
env — трансформации под окружения
Каждая секция отвечает за отдельный этап обработки кода.
jsc
jsc (JavaScript Compiler) определяет, как SWC парсит и
трансформирует исходный код.
{
"swc": {
"jsc": {
"target": "es2019",
"parser": {
"syntax": "typescript",
"tsx": true,
"decorators": true,
"dynamicImport": true
}
}
}
}
parser.syntax
Определяет язык входного кода:
ecmascript — JavaScript
typescript — TypeScript
jsx — React JSX (через jsx: true)
SWC не выполняет type-checking, а только удаляет типы:
{
"swc": {
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020"
}
}
}
Важно учитывать: ошибки типов не будут обнаружены на этапе
трансформации, для этого используется tsc –noEmit.
Для React-проектов включается обработка JSX:
{
"swc": {
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
},
"transform": {
"react": {
"runtime": "automatic",
"importSource": "react"
}
}
}
}
}
Ключевые параметры:
runtime: “automatic” — использование нового JSX runtime
runtime: “classic” — классический
React.createElement
importSource — источник JSX runtime (например,
react или preact)
Секция module определяет формат выходных модулей:
{
"swc": {
"module": {
"type": "commonjs"
}
}
}
Доступные значения:
es6 — ESM
commonjs — CommonJS
amd, umd, systemjs — реже
используемые форматы
Пример для Node.js окружения:
{
"swc": {
"module": {
"type": "commonjs",
"strict": true,
"lazy": false
}
}
}
Параметр lazy позволяет откладывать загрузку модулей, что
может быть полезно в больших приложениях.
SWC включает встроенный минификатор, который также настраивается через
swc:
{
"swc": {
"minify": true
}
}
Расширенная конфигурация:
{
"swc": {
"minify": {
"compress": {
"unused": true,
"dead_code": true
},
"mangle": {
"topLevel": false
}
}
}
}
compress
Отвечает за логические и структурные оптимизации:
mangle
Сокращает имена переменных:
topLevel: true — включает обфускацию глобальных переменных
Для отладки важно сохранять соответствие исходного и скомпилированного кода:
{
"swc": {
"sourceMaps": true
}
}
Варианты:
true — генерация inline или external source maps
false — отключение
“inline” — встроенные карты
В связке с бандлерами source maps часто передаются дальше в webpack или vite pipeline.
Раздел env позволяет адаптировать код под целевые
окружения:
{
"swc": {
"env": {
"targets": {
"chrome": "100",
"node": "18"
},
"mode": "entry"
}
}
}
targets
Определяет минимальные версии сред выполнения.
mode
usage — анализирует используемые возможности и добавляет
полифилы
entry — преобразует весь входной код целиком
Типичный пример package.json для проекта на SWC:
{
"name": "app",
"version": "2.0.0",
"swc": {
"jsc": {
"target": "es2020",
"parser": {
"syntax": "typescript",
"tsx": true,
"decorators": true
},
"transform": {
"react": {
"runtime": "automatic"
}
}
},
"module": {
"type": "es6"
},
"sourceMaps": true,
"minify": false,
"env": {
"targets": {
"node": "18"
}
}
}
}
Такая конфигурация подходит для серверных приложений, где важна совместимость с современным Node.js и поддержка TypeScript.
SWC используется через разные интеграции:
@swc/core
@swc/cli
swc-loader (webpack)
next.js (внутренняя интеграция)
Каждая среда может по-своему интерпретировать package.json:
При наличии нескольких источников конфигурации используется следующий порядок:
.swcrc
package.json → swc
Такой порядок позволяет гибко переопределять настройки без изменения файлов проекта.
В монорепозиториях package.json с swc может
быть определён на уровне каждого пакета. В этом случае важно учитывать:
package.json
targets и
module.type
Часто используется базовый конфиг, распространяемый через shared package, но SWC не выполняет автоматическое наследование — это задача сборочной инфраструктуры.
Несмотря на удобство, подход имеет ограничения:
package.json
swc в пользу
.swcrc
В сложных проектах часто применяется гибридная схема: базовая
конфигурация в .swcrc, а частичные переопределения — в
сборочных скриптах.
Конфигурация SWC в package.json часто используется как
замена Babel:
Однако набор плагинов и трансформаций менее гибкий по сравнению с Babel,
что отражается на ограниченной расширяемости через
package.json.