Пакет SWC в экосистеме JavaScript распространяется как
набор модулей, основным из которых является @swc/core. Он содержит нативный
компилятор, написанный на Rust, и используется для трансформации
современного JavaScript и TypeScript в совместимый код для различных
сред выполнения.
Базовая установка через npm выполняется добавлением пакета в зависимости проекта:
npm install -D @swc/core
В большинстве случаев SWC используется как инструмент
сборки или транспиляции, поэтому его добавляют именно в
devDependencies. Это позволяет не включать его в
production-бандл и уменьшить размер итогового приложения.
Для работы через командную строку часто устанавливается дополнительный пакет:
npm install -D @swc/cli
@swc/cli
предоставляет интерфейс для запуска трансформаций напрямую из терминала,
без необходимости интеграции с bundler’ами.
Типовая структура после установки включает:
@swc/core — ядро компилятора
@swc/cli
— CLI-обёртка
При использовании Yarn процесс установки полностью эквивалентен npm, однако отличается синтаксис команд и структура lock-файла.
Установка ядра SWC:
yarn add -D @swc/core
Добавление CLI-инструмента:
yarn add -D @swc/cli
Yarn автоматически фиксирует версии зависимостей в
yarn.lock, обеспечивая детерминированную сборку проекта на
разных машинах.
При использовании Yarn 2+ (Berry) пакетная модель может работать без
node_modules, что особенно важно для крупных
монорепозиториев, где SWC применяется как часть общей системы сборки.
pnpm использует жёсткую структуру хранения зависимостей с контент-адресуемым хранилищем, что уменьшает дублирование пакетов и ускоряет установку в больших проектах.
Установка SWC через pnpm:
pnpm add -D @swc/core
CLI-инструмент:
pnpm add -D @swc/cli
Особенность pnpm заключается в строгой изоляции зависимостей: пакет не
может использовать модули, не объявленные в его
package.json. Это важно для SWC-интеграций, так как
некоторые плагины или обёртки требуют явного указания всех зависимостей.
После установки можно проверить доступность SWC через CLI:
npx swc --version
или при глобальной доступности:
swc --version
Простейшая трансформация файла выполняется командой:
npx swc src/index.js -o dist/index.js
Если используется TypeScript:
npx swc src/index.ts -o dist/index.js
SWC автоматически обрабатывает синтаксис TypeScript без необходимости
предварительной компиляции через tsc, если не требуется
проверка типов.
Глобальная установка встречается реже, так как SWC обычно привязан к конкретному проекту и версии Node.js.
Глобальная установка:
npm install -g @swc/cli
или
pnpm add -g @swc/cli
Такой подход используется в основном для утилитарных сценариев, когда требуется быстрый доступ к CLI вне проекта. Однако он может приводить к конфликтам версий между разными проектами.
Локальная установка предпочтительнее, поскольку:
В монорепозиториях SWC часто подключается на уровне root-пакета:
pnpm add -Dw @swc/core @swc/cli
или в Yarn Workspaces:
yarn add -D -W @swc/core @swc/cli
Флаг -W или -w означает установку в корневую
область workspace. Это позволяет использовать единый компилятор для всех
пакетов репозитория.
SWC активно развивается, и разные версии могут содержать изменения в AST, плагинах и поддержке стандартов ECMAScript.
Рекомендуется фиксировать версию явно:
npm install -D @swc/core@1.3.100
Это особенно важно в CI/CD, где даже небольшие изменения в трансформации могут влиять на итоговый бандл.
При обновлении версии следует учитывать:
@swc/preset-env)
В реальных проектах SWC редко используется в одиночку. Часто добавляются дополнительные пакеты:
npm install -D @swc/preset-env
npm install -D @swc/preset-typescript
Они расширяют поведение трансформера и позволяют настраивать целевые среды выполнения.
Также при интеграции с bundler’ами могут использоваться:
swc-loader для Webpack
SWC требует актуальной версии Node.js, так как использует нативные бинарники.
Проверка версии:
node -v
При несовместимости возможны ошибки загрузки бинарных модулей
@swc/core. В этом случае требуется
либо обновление Node.js, либо установка соответствующей версии SWC,
собранной под конкретную платформу.
@swc/core содержит
prebuilt-бинарники для популярных платформ:
При установке пакет автоматически выбирает подходящий бинарник. Однако в редких случаях (например, нестандартные архитектуры) может потребоваться сборка из исходников.
Для этого используется Rust toolchain, и установка становится зависимой
от наличия cargo и rustc.
Наиболее частые проблемы:
Очистка npm cache:
npm cache clean --force
Повторная установка зависимостей:
rm -rf node_modules
npm install
В pnpm:
pnpm store prune
pnpm install
SWC не выполняет строгую проверку типов, поэтому в TypeScript-проектах
он часто комбинируется с tsc –noEmit:
npx tsc --noEmit
npx swc src -d dist
Такой подход разделяет ответственность:
Это ускоряет сборку по сравнению с полной компиляцией через
tsc.
После добавления SWC типичный проект содержит:
project/
├─ src/
├─ dist/
├─ package.json
├─ .swcrc
Файл .swcrc определяет конфигурацию трансформации и
становится ключевым элементом работы SWC в проекте.