esbuild генерирует выходные артефакты в нескольких форматах модулей, каждый из которых ориентирован на конкретные среды выполнения JavaScript. Ключевая особенность подхода заключается в том, что один и тот же исходный код может быть преобразован в разные представления без изменения логики приложения, но с учётом ограничений платформы.
ESM является наиболее универсальным форматом, используемым в современных средах выполнения.
Особенности:
В esbuild формат ESM активируется через:
format: "esm"Типичный результат включает строгие import/export конструкции:
import { fn } from './module.js';
export const value = 42;
ESM особенно важен для сред, где требуется максимальная оптимизация загрузки и исполнения.
CommonJS остаётся ключевым форматом в экосистеме Node.js, особенно в старых проектах и библиотеках.
Особенности:
require() и
module.exportsВ esbuild активируется через:
format: "cjs"Пример выходного кода:
const { fn } = require('./module.js');
exports.value = 42;
CommonJS часто используется как fallback-формат для совместимости.
IIFE формат применяется в браузерных средах без модульной системы.
Особенности:
<script>В esbuild:
format: "iife"Пример структуры:
(() => {
const value = 42;
window.myLibrary = { value };
})();
IIFE часто используется для библиотек, распространяемых через CDN без сборщиков.
Браузеры исторически поддерживают несколько подходов к модулям:
<script type="module"><script>Основная сложность заключается в различии:
При сборке под браузер используются параметры:
platform: "browser"target: "es2017" или вышеЭто влияет на:
Node.js поддерживает два основных режима:
По умолчанию Node.js интерпретирует файлы как CommonJS. Поэтому:
require.js без type: moduleПри наличии:
{
"type": "module"
}
Node.js переключается на ESM поведение.
esbuild учитывает это при сборке через:
platform: "node"Особенности Node.js-ориентированной сборки:
__dirname через polyfill или исключениеimport.meta.urlfs,
path)Deno использует исключительно ESM-стиль модулей.
Особенности совместимости:
При сборке:
format: "esm"platform: "neutral" или "browser"Deno требует:
Bun поддерживает:
Однако поведение отличается:
При использовании esbuild важно:
Среды выполнения типа Workers поддерживают:
Требования:
fs, netСборка через esbuild:
format: "esm"platform: "browser"esbuild использует ключевой параметр platform, который
определяет стратегию трансформации:
browser — оптимизация под вебnode — под Node.js окружениеneutral — универсальный режим без спецификиКаждый режим влияет на:
Поддерживается только в ESM:
import()Формат влияет на структуру минифицированного кода:
Для браузера часто требуется экспорт в глобальный объект:
windowglobalThisИспользуется:
globalesbuild при этом может автоматически адаптировать код, если задан entry point и output format.
esbuild поддерживает быстрый трансформ:
Но формат вывода влияет на результат:
При сборке под разные среды:
external: ["fs", "path"]Параметр target определяет уровень Jav * aScript:
es5 — максимальная совместимостьes2017 — современный браузерный baselineesnext — минимальная трансформацияВлияние на форматы:
Поддерживаются:
Поддерживаются:
Требует:
esbuild позволяет минимизировать различия за счёт предварительной оптимизации графа зависимостей до генерации выходного формата.