Механизм loader в Esbuild определяет, каким образом конкретный файл будет интерпретирован на этапе сборки. Каждый loader задаёт стратегию обработки входного модуля: преобразование в JavaScript, инлайн как строка, выдача как URL-ресурс, передача в бинарном виде или полное игнорирование содержимого.
Loader-значения применяются как для расширений файлов, так и для отдельных путей через конфигурацию сборки. Поведение loader напрямую влияет на итоговый бандл, структуру зависимостей и способ включения ресурсов в приложение.
js
Loader js используется для стандартных JavaScript-файлов
без JSX-синтаксиса. Файл передаётся в граф модулей без дополнительных
трансформаций, кроме базовой обработки import/export.
Особенности:
jsx
Loader jsx предназначен для JavaScript-файлов,
содержащих JSX-выражения.
Поведение:
React.createElement или
автоматический JSX runtime (в зависимости от настройки);ts
Loader ts обрабатывает TypeScript без JSX.
Характеристики:
tsx
Loader tsx объединяет поддержку TypeScript и JSX.
Особенности обработки:
json
Loader json позволяет импортировать JSON-файлы как
модули.
Поведение:
default export;Пример использования:
import data from './config.json'
css
Loader css обрабатывает стили как часть графа
модулей.
Поведение:
@import и URL-ресурсов;text
Loader text импортирует содержимое файла как строку.
Особенности:
Пример:
import template from './template.txt'
binary
Loader binary позволяет импортировать файл как
Uint8Array.
Поведение:
base64
Loader base64 преобразует файл в строку Base64.
Особенности:
dataurl
Loader dataurl конвертирует файл в Data URL формат.
Поведение:
file
Loader file перемещает файл в выходную директорию сборки
и возвращает ссылку на него.
Особенности:
empty
Loader empty полностью игнорирует содержимое файла.
Поведение:
Esbuild может определять loader автоматически по расширению файла, если не указана явная настройка. Однако явное определение через конфигурацию build API или CLI обеспечивает предсказуемость результата.
Пример конфигурации:
loader: {
'.js': 'js',
'.jsx': 'jsx',
'.ts': 'ts',
'.tsx': 'tsx',
'.json': 'json',
'.css': 'css',
'.txt': 'text',
'.png': 'file'
}
Каждый loader влияет не только на преобразование файла, но и на способ его включения в dependency graph:
Разные loader-значения по-разному влияют на скорость сборки:
js, ts и tsx требуют парсинга
и трансформации AST;json обрабатывается быстрее за счёт прямого
парсинга;text, base64, binary работают
через файловое чтение без AST;file практически не участвует в трансформации
содержимого;empty является наиболее дешёвым вариантом
обработки.Loader часто используется совместно с плагинами Esbuild для расширенной логики обработки:
Модель loader в Esbuild предельно упрощена:
Такое ограничение обеспечивает высокую скорость сборки и предсказуемость результата, но снижает гибкость по сравнению с более тяжёлыми бандлерами.