Esbuild распространяется как npm-пакет с предкомпилированными бинарными файлами для различных платформ. Архитектура инструмента предполагает два основных подхода к подключению: локальную установку в рамках проекта и глобальную установку на уровне системы. Эти модели различаются по управлению версиями, воспроизводимости сборки и способу вызова CLI.
Локальная установка является стандартным способом интеграции esbuild в современные JavaScript-проекты. Пакет добавляется в зависимости проекта и фиксируется в lock-файле, что обеспечивает детерминированность сборки.
Установка через npm:
npm install esbuild --save-dev
Через yarn:
yarn add esbuild --dev
Через pnpm:
pnpm add esbuild -D
После установки бинарный файл размещается внутри
node_modules/.bin, а Node.js автоматически подключает его к
окружению при использовании npm-скриптов.
Типичный вызов через package.json:
{
"scripts": {
"build": "esbuild src/index.js --bundle --outfile=dist/bundle.js"
}
}
Запуск:
npm run build
Локальная установка обеспечивает привязку к конкретной версии
esbuild, указанной в package.json и зафиксированной в
lock-файле (package-lock.json, yarn.lock,
pnpm-lock.yaml). Это исключает расхождения между средами
разработки, CI и продакшеном.
При отсутствии явной локальной установки возможен запуск через
npx, pnpm dlx или yarn dlx. В
этом случае бинарный пакет загружается и исполняется без явного
добавления в зависимости проекта.
npx esbuild src/index.js --bundle --outfile=dist/bundle.js
Особенности такого подхода:
В условиях CI/CD и долгоживущих проектов такой способ считается нестабильным с точки зрения воспроизводимости.
Глобальная установка выполняется на уровне системы и делает команду
esbuild доступной из любого каталога без привязки к
конкретному проекту.
npm install -g esbuild
После установки бинарный файл попадает в глобальный PATH npm:
/usr/local/bin или npm-managed
директории;%AppData%\npm.Проверка доступности:
esbuild --version
Глобальная установка чаще используется для утилитарных задач, экспериментальных сценариев и локальных одноразовых сборок вне контекста проекта.
Локальная установка:
package.json;Глобальная установка:
Локальный подход обеспечивает идентичность поведения в разных средах
благодаря lock-файлам и установке зависимостей через
npm ci.
Глобальный подход не гарантирует воспроизводимости, поскольку зависит от состояния системы пользователя.
Локальная установка интегрируется через:
Глобальная установка требует предварительной настройки окружения и проверки наличия бинарного файла в PATH, что снижает переносимость конфигурации.
После локальной установки бинарный файл доступен через несколько механизмов:
esbuild src/index.js --bundle --outfile=dist/app.js
./node_modules/.bin/esbuild src/index.js --bundle --outfile=dist/app.js
npx esbuild src/index.js --bundle --outfile=dist/app.js
Node.js автоматически добавляет node_modules/.bin в PATH
при выполнении npm-скриптов, что делает явное указание пути избыточным в
большинстве сценариев.
Esbuild активно развивается, при этом изменения CLI и API могут влиять на поведение сборки. В связи с этим используется семантическое версионирование:
Фиксация версии в package.json:
{
"devDependencies": {
"esbuild": "0.21.0"
}
}
Или диапазон:
{
"devDependencies": {
"esbuild": "^0.21.0"
}
}
Lock-файл фиксирует точную версию, обеспечивая стабильность сборки.
В автоматизированных пайплайнах предпочтительна локальная установка с использованием:
npm ci
или аналогов pnpm/yarn:
pnpm install --frozen-lockfile
Далее сборка выполняется через npm scripts, что гарантирует использование строго зафиксированной версии esbuild.
Глобальная установка в CI рассматривается как нежелательная практика из-за невозможности контроля версии и состояния среды выполнения.
В монорепозиториях esbuild обычно устанавливается:
node_modules с hoisting через pnpm/yarn
workspaces.Локальная установка позволяет:
При локальной установке CLI доступен через механизм npm bin:
node_modules/.bin добавляется в PATH временно;npx ищет бинарник в локальных и удалённых
источниках.Глобальная установка добавляет бинарник в системный PATH, делая его доступным без контекста проекта.
Локальная установка используется как базовый стандарт:
Глобальная установка ограничивается сценариями: