Параметр target определяет минимальную среду выполнения
JavaScript-кода, который генерирует сборщик. От выбранного значения
зависит уровень транспиляции, набор полифиллов на уровне синтаксиса и
степень преобразования современных возможностей языка.
В основе механизма лежит сопоставление возможностей JavaScript с конкретными версиями движков V8, JavaScriptCore, SpiderMonkey и средами выполнения, такими как Node.js и браузеры. Чем старее целевая среда, тем больше синтаксических конструкций подвергается трансформации.
es5 — наиболее совместимый, но одновременно наиболее
«дорогой» по преобразованиям таргет.
При выборе es5 выполняется максимальная деградация
синтаксиса:
functionconst и let заменяются на
varfor...of преобразуется в классические циклыES5 увеличивает размер выходного кода за счёт вспомогательных функций, таких как helper-реализации классов и генераторов. Это особенно заметно в больших приложениях, где используется современный синтаксис.
ES5 используется исключительно для поддержки устаревших окружений, где отсутствует поддержка ES2015 и выше. В современных браузерах и Node.js этот уровень обычно не применяется.
Диапазон es2015–es2022 задаёт постепенное
уменьшение степени трансформации. Каждое значение соответствует набору
возможностей ECMAScript, включённых в соответствующую редакцию
стандарта.
Минимальная современная база:
let/const остаются без преобразованийТрансформации касаются в основном генераторов и некоторых новых встроенных функций.
Эти версии вводят точечные улучшения:
**async/await (ES2017)esbuild при этих таргетах минимизирует вмешательство в код, ограничиваясь только тем, что не поддерживается целевой средой.
Добавляются:
Array.prototype.flat и flatMapObject.fromEntries?.)??)При установке target ниже уровня поддержки этих функций происходит их трансформация в более длинные выражения с проверками и временными переменными.
&&=,
||=, ??=)Promise.anyString.prototype.replaceAllНа этих уровнях esbuild почти не выполняет преобразований, если целевая среда поддерживает современные движки.
При использовании node target учитывается версия среды
выполнения Node.js.
target: nodeXX означает:
При target node esbuild:
require или import в зависимости
от режимаПри таргете для браузеров используется комбинация версий движков, ориентированных на реальные браузерные среды.
Если указан современный браузерный таргет:
Если указан устаревший набор:
Браузерный target всегда предполагает:
target напрямую определяет, какие конструкции JavaScript
считаются «безопасными» для вывода без изменений.
Более современный target:
Более старый target:
Хотя tree-shaking формально независим от target,
фактически старые трансформации могут ухудшать его эффективность из-за
появления дополнительных вспомогательных функций.
import { build } from "esbuild";
build({
entryPoints: ["src/index.js"],
bundle: true,
outfile: "dist/bundle.js",
target: ["es2018"]
});
В этом случае код приводится к уровню ES2018: современные конструкции выше этого уровня преобразуются.
build({
entryPoints: ["server/app.js"],
platform: "node",
target: "node18"
});
Поведение:
build({
entryPoints: ["src/main.js"],
platform: "browser",
target: ["chrome90", "firefox88", "safari14"]
});
Особенности:
| Target | Уровень трансформации | Размер кода | Совместимость |
|---|---|---|---|
| ES5 | максимальный | высокий | устаревшие среды |
| ES2015–2018 | средний | средний | большинство современных сред |
| ES2019–2022 | минимальный | низкий | современные браузеры и Node.js |
| Node | адаптивный | низкий | серверная среда |
| Browser | зависимый от списка | переменный | клиентская среда |
При указании массива target:
target: ["es2018", "chrome80", "node16"]
esbuild выбирает минимально общий знаменатель возможностей:
target выступает центральным параметром,
связывающим:
В системах сборки он определяет баланс между современным синтаксисом и необходимостью поддержки старых окружений, влияя на всю цепочку преобразований исходного JavaScript-кода.