esbuild.build() — асинхронная функция сборки, являющаяся основным программным интерфейсом пакета esbuild в режиме JavaScript API. Она принимает объект конфигурации типа BuildOptions и возвращает Promise, который разрешается в объект BuildResult. Поведение функции полностью определяется переданными опциями, включая стратегию бандлинга, вывод файлов, генерацию sourcemap, работу плагинов и режим инкрементальной сборки.
Типовая сигнатура в TypeScript-стиле:
function build(options: BuildOptions): Promise<BuildResult>
Где:
Функция всегда асинхронная и не блокирует поток выполнения. Внутри используется нативный Go-движок esbuild, а Node.js API выступает тонкой обёрткой.
Точка входа или набор точек входа:
entryPoints: string[] | { [key: string]: string }
Варианты поведения:
Пример:
entryPoints: ["src/index.js"]
entryPoints: {
app: "src/app.js",
admin: "src/admin.js"
}
bundle: boolean
Включает режим бандлинга.
true — выполняется рекурсивное объединение
зависимостейfalse — компиляция файлов без объединения импортовПри bundle: true активируется граф зависимостей, резолв
модулей и tree shaking.
outfile: string
outdir: string
При использовании entryPoints как объекта или массива с
несколькими элементами outdir становится обязательным.
write: boolean
Определяет стратегию вывода:
true — запись файлов на дискfalse — возврат файлов в памяти через
outputFilesПри write: false esbuild работает как in-memory bundler,
что часто используется в middleware и виртуальных файловых системах.
platform: "browser" | "node" | "neutral"
Влияет на:
Особенности:
browser — приоритет Web API, исключение Node
built-insnode — сохранение Node.js-окруженияneutral — минимальные предположения о среде
выполненияformat: "iife" | "esm" | "cjs"
Определяет формат выходного кода:
sourcemap: boolean | "inline" | "external" | "linked"
Режим генерации source maps:
false — отключеныtrue — внешние .map файлыinline — встроенные в файлexternal — отдельный файл .maplinked — связанный режим с ссылкой на картуsplitting: boolean
Активирует code splitting для ESM-формата.
Условия:
format: "esm"bundle: trueРезультат — несколько чанков с разделением общих зависимостей.
minify: boolean
Эквивалент:
minifyWhitespace: true
minifyIdentifiers: true
minifySyntax: true
Снижает размер выходного кода за счёт:
target: string | string[]
Определяет целевую версию Jav * aScript:
es2015, es2020, esnext["es2020", "chrome58"]Влияет на трансформации и синтаксис вывода.
loader: {
".js": "js",
".ts": "ts",
".png": "file",
".css": "css"
}
Механизм определения обработки файлов по расширению.
Основные loader-типы:
js, tsjsx, tsxjsoncsstextfiledataurlexternal: string[]
Модули, исключаемые из бандла:
external: ["react", "react-dom"]
Импорты сохраняются как есть без инлайнинга.
define: {
"process.env.NODE_ENV": '"production"'
}
Compile-time замены переменных.
Работает как макроподстановка до выполнения AST преобразований.
inject: string[]
Файлы, содержимое которых автоматически вставляется в каждый входной модуль.
Используется для polyfill-подобных сценариев.
plugins: Plugin[]
Массив плагинов esbuild.
Плагин представляет объект с хук-функциями:
onResolveonLoadПозволяет расширять систему резолва и загрузки модулей.
incremental: boolean
Включает режим инкрементальной сборки.
При true функция возвращает дополнительный объект:
Позволяет переиспользовать граф зависимостей между сборками.
metafile: boolean
При true формируется объект метаданных сборки.
Содержит:
interface BuildResult {
errors: BuildFailure[]
warnings: BuildFailure[]
outputFiles?: OutputFile[]
metafile?: Metafile
}
Массив ошибок сборки:
errors: BuildFailure[]
Каждый элемент содержит:
При наличии ошибок процесс сборки считается неуспешным.
warnings: BuildFailure[]
Структурно аналогичен errors, но не прерывает сборку.
Используется для:
outputFiles?: OutputFile[]
Появляется только при:
write: false
Каждый OutputFile содержит:
{
path: string
contents: Uint8Array
}
Особенности:
metafile?: Metafile
Возвращается при включении metafile: true.
Структура включает:
Список входных модулей и их зависимостей.
Описание каждого выходного файла:
Пример структуры:
{
"inputs": {
"src/index.js": {
"imports": [],
"format": "esm"
}
},
"outputs": {
"dist/index.js": {
"inputs": ["src/index.js"],
"bytes": 12345
}
}
}
Promise, возвращаемый esbuild.build(), резолвится только после завершения всех стадий:
При ошибках Promise не отклоняется всегда — ошибки могут
присутствовать в поле errors, даже при успешном resolve,
если конфигурация допускает частичный вывод.
| write | outputFiles |
|---|---|
| true | undefined |
| false | Array |
| metafile | result.metafile |
|---|---|
| false | undefined |
| true | Metafile object |
При включении:
const result = await esbuild.build({
entryPoints: ["src/index.js"],
bundle: true,
incremental: true
})
добавляется:
result.rebuild()
result.dispose()
Архитектура делает esbuild.build() одной из наиболее быстрых JS-сборок за счёт отказа от интерпретируемых этапов внутри Node.js слоя.