Функция esbuild.transform() представляет собой
низкоуровневый API библиотеки Esbuild, предназначенный для
преобразования отдельного фрагмента исходного кода без участия файловой
системы и без запуска полноценного процесса сборки. Она работает
исключительно с переданной строкой кода и возвращает результат
трансформации в виде структуры, содержащей преобразованный код,
sourcemap, предупреждения и дополнительные метаданные.
Базовая форма функции:
esbuild.transform(input: string, options?: TransformOptions): Promise<TransformResult>
Синхронный аналог:
esbuild.transformSync(input: string, options?: TransformOptions): TransformResult
Ключевая особенность transform() — асинхронная природа,
даже если внутри не выполняется I/O. Это связано с унификацией API
Esbuild: все операции, потенциально входящие в пайплайн сборки,
представлены в виде Promise-интерфейсов.
Строка исходного кода, подлежащая преобразованию. Может содержать:
Esbuild не требует полной структуры проекта — достаточно валидного синтаксического фрагмента.
Объект конфигурации, управляющий поведением трансформации. Именно он определяет режим компиляции, целевую платформу и дополнительные этапы обработки.
Определяет тип входного кода.
Основные значения:
"js" — JavaScript"ts" — TypeScript"jsx" — JavaScript с JSX"tsx" — TypeScript с JSX"json" — JSON как модуль"text" — текстовый контентПример:
esbuild.transform(code, {
loader: "ts"
})
Управляет генерацией source map:
false — отключеноtrue — inline sourcemap"inline" — встроенная карта"external" — отдельный файл карты (в build-режиме)"both" — оба вариантаВ контексте transform() чаще всего используются
true или "inline".
Включает минификацию кода:
Пример:
esbuild.transform(code, {
minify: true
})
Определяет целевую версию Jav * aScript:
"es2015""es2017""es2020""esnext"Можно задавать массив целей:
target: ["es2015", "chrome58", "firefox57"]
Esbuild подбирает наиболее строгий совместимый диалект.
Определяет функцию создания JSX-элементов.
По умолчанию:
React.createElement
Пример изменения:
esbuild.transform(code, {
jsxFactory: "h"
})
Указывает фабрику для JSX-фрагментов:
esbuild.transform(code, {
jsxFragment: "Fragment"
})
Используется при automatic JSX runtime (React 17+):
jsxImportSource: "react"
Позволяет управлять импортом функций JSX без явного указания
jsxFactory.
Позволяет выполнять текстовую подстановку на этапе трансформации.
Пример:
esbuild.transform(code, {
define: {
"process.env.NODE_ENV": "\"production\""
}
})
Это прямой препроцессор, работающий до анализа AST.
Определяет целевую среду выполнения:
"browser" — браузерные ограничения"node" — Node.js окружение"neutral" — отсутствие спецификиФормат выходного кода:
iife — немедленно вызываемая функцияesm — ES Modulescjs — CommonJSУправление сохранением комментариев лицензий:
"none" — удаляются"inline" — остаются в коде"eof" — переносятся в конец файла"linked" — выносятся в отдельный файлКонтроль кодировки выходного кода. ASCII используется для максимальной совместимости и минимизации размера.
Хотя чаще используется в build(), в
transform() влияет на удаление неиспользуемых выражений в
рамках локального кода.
Если установлено true, функция возвращает не только код,
но и AST (Abstract Syntax Tree).
esbuild.transform(code, {
ast: true
})
Это важно для инструментов анализа и метапрограммирования.
Результирующий JavaScript-код после трансформации.
Содержит:
Source map в формате JSON (обычно в виде строки).
Используется для:
Массив предупреждений компилятора.
Каждое предупреждение содержит:
Ошибки трансформации. В отличие от warnings, они могут прерывать процесс выполнения Promise.
Структура AST, зависящая от внутреннего формата Esbuild. Используется для:
esbuild.transform() не выполняет:
Фактически он ограничен:
Это делает его изолированным и предсказуемым инструментом для обработки отдельных модулей или строк.
const result = await esbuild.transform(sourceCode, {
loader: "tsx",
minify: true,
sourcemap: "inline",
target: "es2017",
jsxFactory: "React.createElement",
jsxFragment: "Fragment",
define: {
"process.env.NODE_ENV": "\"development\""
}
})
transform():
build():
Полностью аналогичен по параметрам, но выполняется синхронно:
const result = esbuild.transformSync(code, {
minify: true
})
Используется в средах, где невозможен async runtime (например, некоторые CLI-утилиты или ранние стадии загрузки приложений).
Ошибки в transform() делятся на:
При наличии ошибок Promise отклоняется, а в sync-версии выбрасывается исключение.
transform() оптимизирован для:
Основной выигрыш достигается за счёт:
При включённом ast результат может использоваться как
промежуточное представление:
Однако AST Esbuild не является стабильным публичным API в смысле долгосрочной совместимости, поэтому его использование ограничивается внутренними инструментами.
loader определяет первичную стадию разбора:
Далее применяется общий JS pipeline:
JSX обрабатывается независимо от основного синтаксиса JavaScript. В зависимости от конфигурации:
jsxFactory и
jsxFragmentjsxImportSourceЭто влияет на итоговую структуру импортов и вызовов.
esbuild.transform() считается стабильной частью
публичного API Esbuild. Изменения обычно касаются:
Сигнатура и базовая модель результата остаются консистентными между версиями.