SWC рассматривает конфигурацию как совокупность параметров, влияющих на трансформацию исходного кода, и предоставляет несколько механизмов их задания. Одним из ключевых является передача конфигурации через флаги командной строки, что позволяет переопределять поведение компилятора без изменения файлов проекта.
Флаги CLI в SWC представляют собой атомарные параметры, которые:
Основная идея заключается в том, что конфигурация должна быть детерминированной: одинаковый набор флагов всегда приводит к одинаковому результату компиляции.
SWC CLI использует следующую общую форму вызова:
swc <input> [options]
или при использовании пакетных сценариев:
swc src -d dist --options
Флаги могут изменять поведение компиляции как на уровне синтаксиса, так и на уровне генерации кода.
Эти параметры определяют, откуда берётся код и куда он записывается.
-d, –out-dir — директория вывода
-o, –out-file — единый файл результата
–copy-files — копирование не-JS файлов
–source-maps — генерация source maps
Пример:
swc src -d dist --source-maps
В данном случае компиляция сопровождается созданием карт соответствий исходного кода и итогового результата.
Эти флаги определяют, как именно SWC интерпретирует код.
–env — выбор целевой среды (browser, node и т.д.)
–target — целевая версия ECMAScript
–module — формат модулей (commonjs, esm, umd)
–minify — включение минификации
Пример:
swc src -d dist --target es2020 --module commonjs
Такой вызов приводит к транспиляции кода под ES2020 с преобразованием модулей в CommonJS.
SWC использует иерархию источников конфигурации:
.swcrc
Это означает, что флаги всегда перекрывают настройки из
.swcrc.
Пример .swcrc:
{
"jsc": {
"target": "es2019"
}
}
При запуске:
swc src -d dist --target es2022
финальная цель компиляции будет es2022, несмотря на
настройки файла.
Большая часть конфигурации SWC относится к секции jsc,
которая может частично переопределяться через CLI.
swc src -d dist --target es2018
Этот флаг управляет тем, какие синтаксические конструкции будут преобразованы.
Например:
async/await может быть преобразован в генераторы;
Некоторые параметры влияют на парсер:
–syntax — выбор диалекта (ecmascript, typescript, jsx)
–tsx — включение поддержки TSX
–decorators — поддержка декораторов
Пример:
swc src -d dist --syntax typescript --tsx
Это включает разбор TypeScript и JSX одновременно.
Формат модулей является одним из ключевых аспектов конфигурации.
swc src -d dist --module esm
Доступные режимы:
commonjs
esm
umd
amd
Преобразование модулей влияет на:
Минификация в SWC может быть активирована через CLI:
swc src -d dist --minify
Минификация включает:
Дополнительные параметры минификации могут задаваться через конфигурационный объект, но базовое включение часто управляется именно флагом.
swc src -d dist --source-maps
Source maps обеспечивают связь между исходным и скомпилированным кодом.
Варианты генерации:
.map файлы;
Флаг влияет на доступность отладки в браузере и Node.js.
Некоторые флаги могут конфликтовать или перекрывать друг друга.
–minify и –source-maps одновременно
увеличивают размер выходного процесса сборки
–module esm и –module commonjs являются
взаимоисключающими
SWC разрешает конфликты по принципу:
Несмотря на наличие флагов, часть конфигурации может передаваться в виде JSON-строк.
Пример:
swc src -d dist –config &
В этом случае CLI-флаги и JSON-конфигурация объединяются, но CLI всё
равно имеет приоритет.
Переменные окружения и их взаимодействие с флагами
Хотя флаги являются основным способом управления поведением SWC,
переменные окружения могут влиять на вспомогательные аспекты:
-
режим выполнения (development/production);
-
включение debug-логов;
-
пути к конфигурационным файлам.
Однако приоритет остаётся за CLI-параметрами.
Использование флагов в npm-скриптах
Типичный сценарий интеграции:
{
"scripts": {
"build": "swc src -d dist --target es2020 --module commonjs",
"build:prod": "swc src -d dist --minify --source-maps"
}
}
Такой подход фиксирует конфигурацию на уровне проекта и позволяет
управлять режимами сборки через npm.
Поведение флагов в watch-режиме
swc src -d dist --watch
Watch-режим отслеживает изменения файлов и пересобирает проект.
При использовании дополнительных флагов:
swc src -d dist --watch --source-maps
каждая пересборка будет сопровождаться актуализацией source maps и
применением текущей конфигурации.
Стабильность и воспроизводимость сборки
Передача конфигурации через флаги особенно важна для:
-
CI/CD пайплайнов;
-
контейнеризированных сборок;
-
изолированных окружений.
Флаги обеспечивают:
-
отсутствие зависимости от локальных файлов конфигурации;
-
явное описание поведения компиляции;
-
упрощение диагностики ошибок сборки.