javascript42
  • Главная
  • Все учебники
  • Блог

Jest и @swc/jest

« Интеграция с Rspack
Оглавление
Vitest и встроенная поддержка SWC »

Учебник SWC

  • Введение в SWC
    • Что такое SWC и зачем он нужен
    • Сравнение с Babel: скорость, архитектура, ограничения
    • Сравнение с esbuild и другими компиляторами
    • Когда стоит выбирать SWC
    • Архитектура SWC: Rust под капотом
    • Экосистема вокруг SWC: плагины, интеграции, инструменты
  • Установка и базовая настройка
    • Установка через npm, yarn, pnpm
    • Структура пакетов: @swc/core, @swc/cli, @swc/helpers
    • Первый запуск: компиляция одного файла
    • Конфигурационный файл .swcrc: формат и расположение
    • Конфигурация через package.json
    • Переменные окружения и их влияние на поведение компилятора
    • Поддерживаемые платформы и ограничения
  • Конфигурация компилятора
    • Структура объекта конфигурации
    • Поле jsc: настройка компилятора JavaScript
    • Указание целевой среды: targets и env
    • Настройка синтаксического парсера: parser
    • Настройка трансформаций: transform
    • Поле module: системы модулей и их параметры
    • Поле sourceMaps: генерация карт источников
    • Поле minify: подключение минификации
    • Поле env: интеграция с browserslist
    • Поле test, exclude, include: фильтрация файлов
    • Поле isModule и его влияние на обработку
    • Расширенные параметры: assumptions
  • Трансформация JavaScript
    • Поддерживаемые версии ECMAScript
    • Трансформация стрелочных функций
    • Трансформация классов и наследования
    • Трансформация шаблонных литералов
    • Деструктуризация и параметры по умолчанию
    • Оператор spread и rest-параметры
    • Трансформация генераторов и итераторов
    • async/await и трансформация в промисы
    • Optional chaining и nullish coalescing
    • Логические операторы присваивания
    • Трансформация приватных полей классов
    • Статические поля и методы классов
    • Декораторы: поддержка и версии спецификации
    • Трансформация динамического import()
    • BigInt: ограничения и поведение
    • Глобальные объекты и полифилы
  • TypeScript
    • Поддержка TypeScript в SWC
    • Отличие от tsc: только трансформация, не проверка типов
    • Настройка парсера для TypeScript
    • Поддерживаемые конструкции TypeScript
    • Декораторы TypeScript и параметр emitDecoratorMetadata
    • Обработка namespace и enum
    • Трансформация const enum
    • Поведение при ошибках типов
    • Совместное использование SWC и tsc
    • tsconfig.json и его взаимодействие с .swcrc
  • JSX и TSX
    • Поддержка JSX
    • Классический и автоматический runtime
    • Настройка pragmas: jsxFactory, jsxFragmentFactory
    • Импорт React при автоматическом runtime
    • TSX: совместная обработка TypeScript и JSX
    • Использование с Preact, Solid и другими фреймворками
    • Настройка importSource
    • Трансформация JSX в production и development
  • Системы модулей
    • CommonJS: трансформация и особенности
    • ES Modules: сохранение и трансформация
    • AMD
    • UMD: универсальный формат
    • SystemJS
    • Настройка interopRequireDefault и interopRequireWildcard
    • lazy-опция для отложенного импорта
    • Поведение с dynamic import при разных форматах
    • noInterop и его последствия
    • strict и strictMode
  • Минификация
    • Включение минификации в конфигурации
    • Минификация идентификаторов
    • Сжатие кода: compress
    • Настройки сжатия: passes, drop_console, drop_debugger
    • Удаление мёртвого кода
    • Инлайнинг переменных
    • Минификация строк и литералов
    • Особенности минификации в сравнении с terser
    • Ограничения текущей реализации минификатора
  • Source Maps
    • Типы source maps: inline, external, both
    • Поле sourceFileName и sourceRoot
    • Совместимость с браузерными DevTools
    • Работа source maps при минификации
    • Отладка трансформированного кода
  • SWC CLI
    • Установка и использование @swc/cli
    • Компиляция одного файла
    • Компиляция директории
    • Флаги командной строки
    • Опция --watch: отслеживание изменений
    • Передача конфигурации через флаги
    • Вывод результата в stdout
    • Интеграция в npm-скрипты
  • Программный API
    • Подключение @swc/core в Node.js
    • transform(code, options): асинхронная трансформация
    • transformSync(code, options): синхронная трансформация
    • transformFile и transformFileSync
    • Структура возвращаемого объекта: code, map
    • parse и parseSync: получение AST
    • print: генерация кода из AST
    • Обработка ошибок компиляции
    • Типизация API при использовании TypeScript
  • Работа с AST
    • Структура AST в SWC
    • Узлы AST: типы и поля
    • Обход дерева вручную
    • Паттерн visitor
    • Изменение узлов
    • Создание новых узлов
    • Сериализация и десериализация AST
    • Ограничения работы с AST через JS API
  • Плагины
    • Архитектура плагинов SWC
    • Плагины на Rust vs плагины на Wasm
    • Установка и подключение плагина
    • Поле plugin в конфигурации
    • Передача опций в плагин
    • Написание плагина на Rust: базовая структура
    • Трейт Fold и трейт Visit
    • Работа с типами AST в Rust
    • Сборка плагина в Wasm
    • Публикация плагина в npm
    • Отладка плагинов
    • Совместимость версий плагинов и ядра
  • Интеграция с инструментами сборки
    • Интеграция с webpack: swc-loader
    • Настройка swc-loader: опции и производительность
    • Замена babel-loader на swc-loader
    • Интеграция с Vite
    • Интеграция с Rollup: @rollup/plugin-swc
    • Интеграция с Parcel
    • Интеграция с esbuild через плагин
    • Интеграция с Rspack
  • Интеграция с тестовыми фреймворками
    • Jest и @swc/jest
    • Vitest и встроенная поддержка SWC
    • Сравнение производительности с babel-jest
  • Интеграция с Next.js
    • SWC как компилятор по умолчанию в Next.js
    • Конфигурация через next.config.js
    • Поддерживаемые трансформации Next.js
    • styled-components через SWC
    • Emotion через SWC
    • Relay через SWC
    • Remove Console трансформация
    • React Remove Properties
    • Отладка компиляции в Next.js
    • Ограничения и несовместимости
  • Поддержка предложений TC39
    • Stage 3 и stage 4: поддержка в SWC
    • Декораторы: версия 2022-03 и legacy
    • Using declarations
    • Import attributes
    • Явное управление поддерживаемыми предложениями
  • Производительность
    • Параллельная обработка файлов
    • Кэширование в SWC
    • Профилирование компиляции
    • Оптимизация конфигурации для скорости
    • Влияние плагинов на производительность
    • Бенчмарки и методология измерений
  • Миграция с Babel
    • Анализ существующей Babel-конфигурации
    • Соответствие babel-пресетов настройкам SWC
    • Соответствие babel-плагинов возможностям SWC
    • Трансформации, которых нет в SWC
    • Стратегия частичной миграции
    • Типичные проблемы при миграции
    • Совместное использование Babel и SWC в переходный период
  • Отладка и диагностика
    • Режим verbose
    • Чтение сообщений об ошибках SWC
    • Диагностика некорректной трансформации
    • Проверка выходного кода вручную
    • Инструменты для сравнения входного и выходного AST
    • Версионирование и changelog
  • Работа в монорепозитории
    • Общая конфигурация SWC для нескольких пакетов
    • Переопределение конфигурации на уровне пакета
    • Интеграция с Turborepo и Nx
    • Совместное использование @swc/helpers
  • Справочник конфигурации
    • Полная схема .swcrc
    • Поле jsc.parser
    • Поле jsc.transform
    • Поле jsc.target
    • Поле jsc.loose
    • Поле jsc.externalHelpers
    • Поле jsc.keepClassNames
    • Поле jsc.paths и baseUrl
    • Поле jsc.experimental
    • Поле env.targets
    • Поле env.mode и corejs
    • Поле env.shippedProposals
    • Поле module.type и его параметры
    • Поле minify и вложенные поля
    • Поле sourceMaps
    • Поле inlineSourcesContent
javascript42 — изучаем JavaScript вместе

Обратная связь

Ваше сообщение успешно отправлено!