CLI-интерфейс esbuild построен вокруг компактного синтаксиса, где поведение сборки определяется набором флагов после вызова бинарного файла. Базовая форма команды включает входной файл и набор параметров конфигурации:
esbuild input.js --bundle --outfile=dist/output.js
Входной файл может быть указан первым аргументом или через явный флаг
--entry:, однако в большинстве случаев используется
позиционный синтаксис. CLI поддерживает несколько входных точек:
esbuild src/app.js src/admin.js --bundle --outdir=dist
При множественных входных файлах структура выходной директории
формируется автоматически при использовании --outdir.
Ключевым аспектом CLI является управление выходными файлами. Основные параметры:
–outfile задаёт единый выходной файл:
esbuild src/index.js --bundle --outfile=dist/bundle.js
–outdir используется для генерации нескольких файлов:
esbuild src/app.js src/admin.js --bundle --outdir=dist
При использовании --outdir сохраняется структура
относительных путей, если не задано иное.
–splitting включается совместно с ESM-форматом:
esbuild src/app.js --bundle --splitting --format=esm --outdir=dist
Флаг --format определяет тип выходного модуля:
iife — самовызывающаяся функцияcjs — CommonJSesm — ES ModulesПримеры:
esbuild src/index.js --bundle --format=cjs --outfile=dist/index.cjs
esbuild src/index.js --bundle --format=esm --outfile=dist/index.js
Формат влияет на доступность code splitting, динамического импорта и способ обработки зависимостей.
Флаг --platform изменяет поведение резолвинга модулей и
встроенных API:
browser — ориентирован на браузерnode — для Node.js окруженияneutral — универсальная конфигурацияesbuild src/index.js --bundle --platform=node --outfile=dist/server.js
При выборе платформы автоматически корректируются встроенные импорты
(fs, path, url) и стратегии
полифиллов.
esbuild предоставляет набор флагов для ускорения и уменьшения размера бандла:
–minify включает минификацию:
esbuild src/index.js --bundle --minify --outfile=dist/app.js
–sourcemap управляет генерацией source maps:
esbuild src/index.js --bundle --sourcemap --outfile=dist/app.js
Возможные режимы source map:
externalinlinebothПример:
esbuild src/index.js --bundle --sourcemap=external --outfile=dist/app.js
Флаг --define позволяет заменять выражения на этапе
сборки:
esbuild src/index.js --bundle --define:process.env.NODE_ENV=\"production\"
Механизм работает как статическая подстановка значений до этапа минификации, что позволяет удалять условные блоки:
if (process.env.NODE_ENV === "production") {
console.log("prod mode");
}
Флаг --external исключает модули из бандла:
esbuild src/index.js --bundle --external:react --external:react-dom
Такая конфигурация используется при сборке библиотек, где зависимости предполагаются внешними.
CLI поддерживает назначение loader’ов для расширений:
esbuild src/index.js --bundle --loader:.png=file --loader:.css=text
Типы загрузчиков:
js, jsxts, tsxjsontextbinaryfileПример обработки TypeScript и JSX:
esbuild src/app.tsx --bundle --loader:.tsx=tsx
Code splitting включается совместно с ESM:
esbuild src/index.js --bundle --format=esm --splitting --outdir=dist
Динамический импорт (import()) автоматически становится
точкой разделения, создавая дополнительные чанки.
Флаг --metafile сохраняет информацию о графе
зависимостей:
esbuild src/index.js --bundle --metafile=meta.json --outfile=dist/app.js
Файл содержит:
Используется для анализа производительности сборки.
Флаг --watch включает автоматическую пересборку:
esbuild src/index.js --bundle --watch --outfile=dist/app.js
При изменении файлов выполняется инкрементальная пересборка без повторного запуска процесса.
CLI поддерживает режим сервера через --serve:
esbuild src/index.js --bundle --serve=localhost:3000 --outdir=dist
Сервер обслуживает файлы из выходной директории и автоматически пересобирает проект при изменениях.
Флаг --incremental активирует кеширование:
esbuild src/index.js --bundle --incremental
Результат сохраняется в памяти процесса и повторно используется при следующих сборках через API (в CLI применяется ограниченно).
Флаги --banner и --footer добавляют код до
и после результата сборки:
esbuild src/index.js --bundle --banner:js="/* build start */" --footer:js="/* build end */"
Используется для лицензий, глобальных переменных или инициализации среды.
esbuild поддерживает чтение кода из стандартного ввода:
cat src/index.js | esbuild --bundle --outfile=dist/app.js
или
esbuild --bundle --stdin --outfile=dist/app.js
При использовании stdin требуется явное указание формата через
--loader:.js=js при необходимости.
При запуске через npm CLI-аргументы передаются после двойного дефиса:
{
"scripts": {
"build": "esbuild src/index.js --bundle --outfile=dist/app.js"
}
}
Запуск с дополнительными флагами:
npm run build -- --watch
Дополнительные параметры добавляются к базовой команде без изменения package.json.
CLI esbuild чувствителен к правилам оболочки:
--defineПример корректной передачи:
esbuild src/index.js --define:API_URL=\"https://example.com\"
Большинство параметров может использоваться одновременно без ограничения порядка:
esbuild src/index.ts --bundle --platform=browser --format=esm --minify --sourcemap --outdir=dist
Комбинации флагов определяют конечную стратегию сборки: от разработки с наблюдением до production-бандлов с полной оптимизацией и разбиением на чанки.