Base64 loader в esbuild используется для преобразования файловых ресурсов в строку Base64 прямо на этапе сборки. Такой подход позволяет встраивать бинарные данные в JavaScript-бандл без отдельной загрузки через сеть, что особенно полезно для небольших изображений, иконок, шрифтов и других ассетов, где дополнительный HTTP-запрос считается избыточным.
При обработке файла с назначенным loader: “base64” esbuild:
В отличие от dataurl-loader, который формирует полноценный Data URL с
MIME-типом, Base64 loader возвращает только закодированную строку без
префикса вида data:image/png;base64,.
Назначение Base64 loader выполняется через поле loader в
конфигурации сборки:
import * as esbuild from 'esbuild';
esbuild.build({
entryPoints: ['src/index.js'],
bundle: true,
outfile: 'dist/bundle.js',
loader: {
'.png': 'base64',
'.jpg': 'base64',
'.svg': 'base64',
'.woff': 'base64'
}
});
В результате любые импорты соответствующих файлов будут преобразованы в Base64-строки.
import logo from './assets/logo.png';
console.log(logo);
После сборки содержимое logo будет представлено как
строка Base64:
const logo = "iVBORw0KGgoAAAANSUhEUgAA...";
Эта строка может использоваться для последующего формирования Data URL или передачи в API, работающие с бинарными данными в текстовом виде.
esbuild предоставляет несколько способов обработки файлов, и Base64 loader занимает среди них специфическую нишу.
Возвращает содержимое файла как строку:
loader: { '.txt': 'text' }
Копирует файл в output директорию и возвращает путь:
loader: { '.png': 'file' }
Возвращает полноценный Data URL:
loader: { '.png': 'dataurl' }
Возвращает только закодированные данные:
loader: { '.png': 'base64' }
Различие между base64 и dataurl критично:
первый требует ручного добавления MIME-типа при необходимости
использования в браузере.
Base64 loader часто используется в сценариях, где требуется контроль над MIME-типом:
import icon from './icon.svg';
const dataUrl = `data:image/svg+xml;base64,${icon}`;
Такой подход полезен, когда тип данных определяется динамически или требуется оптимизация строки.
Использование Base64 loader влияет на структуру бандла следующим образом:
Base64 кодирование не является сжатием, поэтому для крупных файлов наблюдается значительный рост размера итогового бандла.
Base64 loader не подходит для:
Оптимальным считается использование для:
При сборке esbuild:
Этот процесс происходит на этапе бандлинга и не требует runtime-библиотек.
В режиме bundle: true Base64 loader встраивает данные
внутрь итогового файла.
В режиме без бандлинга (например, при использовании esbuild как трансформера) поведение сохраняется, но результат ограничивается отдельным модулем без агрегации зависимостей.
Поскольку Base64 loader не добавляет MIME-тип, его использование в веб-контексте требует явного указания формата при создании Data URL. Отсутствие корректного MIME-типа может привести к:
Base64 loader часто используется в системах, где требуется минимизация количества запросов:
Инлайнинг через Base64 изменяет модель кэширования:
Это делает подход менее эффективным для крупных приложений, но удобным для компактных библиотек и утилитных модулей.