SWC выполняет компиляцию JavaScript и TypeScript с упором на скорость и минимальную задержку при обработке отдельных модулей. При работе с одним файлом ключевым становится понимание того, как инструмент интерпретирует входной код, какие стадии трансформации он применяет и как формируется итоговый результат — JavaScript, пригодный для выполнения в целевых средах.
При компиляции одного файла SWC рассматривает входной модуль как независимую единицу трансформации. В отличие от сборщиков, работающих с графом зависимостей, здесь отсутствует необходимость анализа импортов на уровне проекта (если не включены дополнительные плагины или режимы сборки).
Основной конвейер включает несколько этапов:
Каждый этап строго изолирован, что позволяет SWC достигать высокой скорости обработки даже при больших файлах.
Наиболее прямой способ обработки одиночного файла — использование CLI-интерфейса SWC. Он предоставляет минимальный набор параметров для трансформации без необходимости подключения сборщиков.
Простейший запуск:
swc input.js -o output.js
При такой конфигурации SWC:
Если требуется строгая интерпретация как TypeScript:
swc input.ts -o output.js
SWC автоматически удаляет типы и выполняет трансформацию синтаксиса в JavaScript.
Для отладки одиночного файла часто используется генерация карт исходного кода:
swc input.ts -o output.js --source-maps
Source map связывает трансформированный код с исходным, позволяя отладчикам корректно отображать исходные строки.
При одиночной компиляции важную роль играет файл конфигурации
.swcrc. Он определяет поведение трансформации независимо от
CLI-параметров.
Пример базовой конфигурации:
{
"jsc": {
"parser": {
"syntax": "typescript"
},
"target": "es2020"
},
"module": {
"type": "es6"
},
"sourceMaps": true
}
Поле parser.syntax определяет, как SWC интерпретирует файл:
ecmascript — стандартный JavaScript
typescript — TypeScript с удалением типов
jsx — JSX-синтаксис (React и совместимые среды)
Выбор парсера влияет на структуру AST, а значит и на все последующие трансформации.
Параметр target определяет уровень JavaScript, который
будет получен на выходе:
es3 / es5 — для устаревших окружений
es2015–es2022 — современные браузеры и Node.js
es2020+ — минимальная трансформация
SWC преобразует только те конструкции, которые не поддерживаются целевым окружением.
Для программной обработки одного файла используется пакет @swc/core. Он
предоставляет API, позволяющий встроить компиляцию в Node.js-окружение.
import { transformFile } from "@swc/core";
const result = await transformFile("input.ts", {
jsc: {
parser: {
syntax: "typescript"
},
target: "es2020"
},
module: {
type: "commonjs"
}
});
console.log(result.code);
Функция transformFile выполняет полный цикл обработки:
Если исходный код уже загружен в память:
import { transform } from "@swc/core";
const sourceCode = `
const value: number = 42;
console.log(value);
`;
const result = await transform(sourceCode, {
filename: "example.ts",
jsc: {
parser: {
syntax: "typescript"
},
target: "es2020"
}
});
Здесь SWC не выполняет файловый ввод-вывод и работает только с переданной строкой.
TypeScript-компиляция в SWC ориентирована исключительно на удаление типов и трансформацию синтаксиса, без проверки типов.
Пример входного кода:
function sum(a: number, b: number): number {
return a + b;
}
После компиляции:
function sum(a, b) {
return a + b;
}
При работе с одним файлом важно учитывать:
SWC поддерживает JSX как часть одиночной компиляции без необходимости подключения Babel.
Пример:
const element = <div className="box">Text</div>;
Результат зависит от настроек runtime:
import { jsx as _jsx } from "react/jsx-runtime";
const element = _jsx("div", {
className: "box",
children: "Text"
});
const element = React.createElement("div", {
className: "box"
}, "Text");
Выбор режима определяется параметром:
{
"jsc": {
"transform": {
"react": {
"runtime": "automatic"
}
}
}
}
SWC может выполнять минификацию даже при обработке одного модуля.
CLI-вариант:
swc input.js -o output.min.js -C minify=true
Основные преобразования:
Программный вариант:
import { minify } from "@swc/core";
const result = await minify("const a = 1 + 2;", {
compress: true,
mangle: true
});
Source map играет критическую роль при отладке:
{
"sourceMaps": true,
"inlineSourcesContent": true
}
SWC формирует mapping между:
Это позволяет отладчикам корректно отображать стек вызовов.
В режиме single-file SWC оптимизирует структуру AST:
Это делает обработку предсказуемой и детерминированной.
При одиночной компиляции можно представить процесс как последовательность:
Каждый шаг изолирован и не зависит от других файлов проекта, что уменьшает сложность анализа и ускоряет выполнение.
SWC поддерживает плагины, которые могут быть подключены даже при одиночной обработке.
Пример концептуальной конфигурации:
{
"jsc": {
"experimental": {
"plugins": [
["plugin-name", { "option": true }]
]
}
}
}
Плагины работают на уровне AST и могут:
Хотя файл компилируется изолированно, SWC преобразует модульную систему:
import → CommonJS или ESM в зависимости от конфигурации
export → совместимый формат целевого окружения
Пример трансформации:
export const a = 1;
в CommonJS:
exports.a = 1;
или в ESM (если не требуется трансформация):
export const a = 1;
Комбинация параметров:
jsc.target
module.type
определяет итоговую форму файла.
Типовые комбинации:
SWC строго следует заданной конфигурации без автоматического «догадочного» поведения, что особенно важно при одиночной компиляции.