Флаг –watch в CLI SWC активирует режим непрерывной
компиляции, при котором инструмент отслеживает изменения в исходных
файлах и автоматически пересобирает только затронутые модули. Это
ключевой механизм для ускорения разработки, поскольку исключает
необходимость ручного запуска сборки после каждого изменения кода.
SWC реализует наблюдение за файловой системой через событийную модель: при изменении, создании или удалении файла триггерится пересборка соответствующих частей проекта. В отличие от полной пересборки, здесь используется инкрементальный подход, что снижает нагрузку на CPU и ускоряет цикл «изменил → увидел результат».
Типичная команда запуска выглядит следующим образом:
swc src -d dist --watch
В этом режиме:
src — входная директория с исходным кодом
-d dist — директория для выходных файлов
–watch — включение режима отслеживания изменений
После запуска процесс не завершается, а продолжает работать в фоне, ожидая файловых событий.
Для TypeScript-проектов команда остается аналогичной:
swc src -d dist --watch
При наличии tsconfig.json SWC учитывает конфигурацию
типизации, но сам режим watch не зависит от TypeScript напрямую — он
работает на уровне файловой системы.
Режим –watch строится вокруг мониторинга изменений в
файловой системе. SWC реагирует на следующие события:
В большинстве окружений используется механизм, близкий к
fs.watch или более надежные абстракции уровня
chokidar-подобных наблюдателей (в зависимости от платформы и сборки SWC
CLI).
Ключевая задача — минимизировать количество повторных компиляций. Поэтому изменения группируются и обрабатываются с небольшой задержкой (debounce), чтобы избежать каскадных пересборок при массовом сохранении файлов редактором.
SWC не пересобирает весь проект при каждом изменении. Вместо этого используется модель частичной компиляции:
Такой подход особенно эффективен в проектах с большим количеством модулей, где полная пересборка может занимать сотни миллисекунд или секунды.
При изменении файла, который импортируется другими модулями, SWC:
Пример:
a.ts → импортируется b.ts → импортируется c.ts
Изменение a.ts может вызвать пересборку b.ts и
c.ts, но не затронет независимые части проекта.
Хотя –watch является CLI-флагом, его поведение косвенно
зависит от конфигурации .swcrc.
Пример конфигурации:
{
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020"
},
"module": {
"type": "es6"
}
}
Watch-режим не добавляет специальных настроек в конфиг, но влияет на процесс обработки, используя те же правила трансформации.
В проектах часто требуется исключить из наблюдения:
node_modules
dist
SWC обычно автоматически игнорирует стандартные директории, однако поведение может зависеть от окружения запуска и оболочки. В монорепозиториях важно следить за тем, чтобы watch не отслеживал лишние каталоги, иначе количество событий файловой системы резко возрастает.
Эффективность режима зависит от нескольких факторов:
Чем больше файлов, тем выше нагрузка на наблюдатель, но компиляция остаётся частичной.
На Linux часто используется inotify, на macOS — FSEvents, на Windows — ReadDirectoryChangesW. Различия влияют на задержки реакции и стабильность событий.
Редакторы кода могут генерировать серию быстрых изменений (auto-save, форматирование), что вызывает несколько событий подряд. SWC сглаживает это через debounce-механизмы.
В монорепозиториях режим –watch может сталкиваться с
проблемами:
Рекомендуется разделять watch-запуски по пакетам:
swc packages/app/src -d packages/app/dist --watch
swc packages/lib/src -d packages/lib/dist --watch
Такой подход уменьшает нагрузку и упрощает диагностику изменений.
Оба инструмента поддерживают watch, но SWC чаще используется как трансформер, а не бандлер.
Webpack watch:
SWC watch:
Режим –watch часто используется совместно с другими
инструментами:
Пример связки:
swc src -d dist --watch &
nodemon dist/index.js
SWC отвечает за компиляцию, nodemon — за перезапуск рантайма.
При возникновении ошибок компиляции SWC:
Это позволяет исправить ошибку и сразу увидеть результат без перезапуска сборщика.
Особенно важно, что watch-режим устойчив к синтаксическим ошибкам в промежуточном состоянии редактирования файла.
Удаление файла в watch-режиме приводит к:
Если файл был частью цепочки импортов, SWC корректирует граф модулей, исключая несуществующие зависимости.
Чтобы избежать перегрузки системы при массовых изменениях, SWC использует задержку между событиями файловой системы.
Типичный сценарий:
Это особенно важно при работе с форматтерами, которые могут переписывать файл несколько раз за сохранение.
Несмотря на эффективность, режим имеет ограничения:
Watch-режим ориентирован исключительно на разработку и быстрый feedback loop.
SWC в этом режиме выступает как быстрый транслятор, минимизирующий задержку между изменением кода и его исполнением.