Интеграция SWC в npm-скрипты строится вокруг идеи замены традиционных
транспиляторов (Babel, tsc в режиме трансформации) на
высокопроизводительный компилятор, выполняющий преобразование JavaScript
и TypeScript через нативные биндинги. SWC работает как CLI-инструмент и
как программный API, но в контексте npm-скриптов чаще используется
именно CLI-обёртка @swc/cli.
Ключевой принцип конфигурации — перенос всех этапов сборки в декларативные команды npm, где SWC выступает центральным звеном пайплайна трансформации исходного кода.
Базовый набор пакетов для интеграции SWC в npm-скрипты включает CLI и ядро компилятора:
npm install -D @swc/core @swc/cli
Для проектов с TypeScript дополнительно требуется типовая конфигурация
через .swcrc, так как SWC не использует
tsconfig.json как основной источник трансформационных
правил (он используется лишь частично в связке с type-checker
инструментами).
В ряде сценариев подключаются вспомогательные пакеты:
rimraf — очистка директорий перед сборкой
chokidar-cli или встроенный –watch режим SWC
cross-env — кроссплатформенные переменные окружения
npm-run-all или concurrently — параллельное
выполнение задач
Стандартная структура package.json при использовании SWC
ориентирована на разделение режимов сборки и разработки.
{
"scripts": {
"build": "swc src -d dist"
}
}
Команда выполняет трансформацию директории src в директорию
dist, сохраняя структуру файлов и применяя настройки из
.swcrc.
{
"scripts": {
"dev": "swc src -d dist --watch"
}
}
Флаг –watch активирует отслеживание изменений файлов. SWC
компилирует только изменённые модули, что снижает нагрузку по сравнению
с полным пересбором.
SWC поддерживает гибкое определение путей:
{
"scripts": {
"build": "swc ./source -d ./build"
}
}
Это позволяет интегрировать нестандартные структуры проекта без дополнительных инструментов сборки.
Файл .swcrc является центральной точкой управления
поведением SWC.
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
},
"target": "es2020"
},
"module": {
"type": "commonjs"
},
"sourceMaps": true
}
jsc.parser.syntax определяет тип входного синтаксиса
(ecmascript / typescript)
target управляет уровнем транспиляции
module.type задаёт формат модулей (commonjs, esm, umd)
sourceMaps обеспечивает отладку после компиляции
SWC способен трансформировать TypeScript без проверки типов. Это влияет на архитектуру npm-скриптов: проверка типов отделяется от сборки.
{
"scripts": {
"build": "npm run clean && swc src -d dist",
"typecheck": "tsc --noEmit"
}
}
Такой подход разгружает сборку, поскольку SWC не выполняет статический анализ типов, ограничиваясь синтаксической трансформацией.
{
"scripts": {
"build": "npm-run-all clean typecheck compile",
"compile": "swc src -d dist"
}
}
Перед сборкой часто требуется удаление старых артефактов:
{
"scripts": {
"clean": "rimraf dist",
"build": "npm run clean && swc src -d dist"
}
}
Такой подход исключает накопление устаревших файлов и конфликт модулей при инкрементальной разработке.
Для повышения эффективности разработки SWC интегрируется с файловыми наблюдателями:
{
"scripts": {
"dev": "npm-run-all --parallel watch serve",
"watch": "swc src -d dist --watch",
"serve": "node dist/index.js"
}
}
В этом сценарии SWC отвечает только за трансформацию, а runtime-слой запускается отдельно.
SWC позволяет переключать формат модулей на уровне сборки:
{
"module": {
"type": "commonjs"
}
}
{
"module": {
"type": "es6"
}
}
В npm-скриптах это позволяет создавать разные сборки:
{
"scripts": {
"build:cjs": "swc src -d dist/cjs",
"build:esm": "swc src -d dist/esm"
}
}
В монорепозиториях SWC часто используется для ускорения сборки множества пакетов:
{
"scripts": {
"build:pkg-a": "swc packages/pkg-a/src -d packages/pkg-a/dist",
"build:pkg-b": "swc packages/pkg-b/src -d packages/pkg-b/dist"
}
}
Для масштабирования применяется параллелизация:
{
"scripts": {
"build": "npm-run-all --parallel build:*"
}
}
SWC может использоваться как трансформер для тестовых раннеров.
{
"jest": {
"transform": {
"^.+\\.(t|j)sx?$": ["@swc/jest"]
}
}
}
npm-скрипты при этом остаются минимальными:
{
"scripts": {
"test": "jest"
}
}
SWC устраняет необходимость Babel-трансформации тестового кода, ускоряя запуск тестов.
SWC может учитывать окружение сборки:
{
"scripts": {
"build:prod": "cross-env NODE_ENV=production swc src -d dist",
"build:dev": "cross-env NODE_ENV=development swc src -d dist"
}
}
Это позволяет переключать поведение конфигурации .swcrc
через условные плагины и оптимизации.
SWC изначально ориентирован на высокую скорость, но интеграция в npm-скрипты позволяет дополнительно ускорить процесс:
npm-run-all
Дополнительная оптимизация достигается за счёт минимизации входных директорий:
{
"scripts": {
"build": "swc src --ignore **/*.test.ts -d dist"
}
}
SWC выводит ошибки компиляции в stdout/stderr, что позволяет напрямую использовать npm-скрипты без дополнительных обработчиков.
Типовая структура диагностики:
.swcrc
Для повышения читаемости логов используется режим:
{
"scripts": {
"build": "swc src -d dist --quiet"
}
}
или наоборот подробный вывод при отладке:
{
"scripts": {
"build:debug": "swc src -d dist --log-level debug"
}
}
При масштабировании проекта SWC интегрируется в многоуровневый пайплайн:
Пример структуры:
{
"scripts": {
"clean": "rimraf dist",
"typecheck": "tsc --noEmit",
"compile": "swc src -d dist",
"postbuild": "node scripts/copy-assets.js",
"build": "npm-run-all clean typecheck compile postbuild"
}
}
Такая композиция делает SWC центральным элементом сборки, вокруг которого выстраиваются вспомогательные процессы без потери производительности.