fileLoader file в esbuild применяется для обработки
импортируемых ресурсов, которые должны быть вынесены в отдельные файлы
при сборке. При встрече такого импорта исходный файл не встраивается в
бандл и не преобразуется в код, а копируется в выходной каталог, после
чего в JavaScript-модуле заменяется на строку с путём к итоговому
файлу.
Ключевая особенность заключается в том, что результатом загрузки становится URL-строка, указывающая на сгенерированный ресурс, а не содержимое файла.
Типичный набор сценариев:
png, jpg, svg,
gif)woff, woff2,
ttf)importfile loaderПри использовании:
import logo from './logo.png'
и конфигурации esbuild:
loader: {
'.png': 'file'
}
происходит следующее:
logo.png читается как внешний ресурс;outdir);logo получает строку — путь до итогового
файла.Пример результата:
console.log(logo)
// "/assets/logo-8f3a9c2d.png"
esbuild не просто копирует файл, а обрабатывает его через систему генерации ассетов. Это означает:
outbase и
outdir.Одной из ключевых возможностей является добавление хеша в имя файла для инвалидации кэша.
За это отвечает параметр:
assetNames
Пример конфигурации:
esbuild.build({
entryPoints: ['src/index.js'],
outdir: 'dist',
loader: {
'.png': 'file'
},
assetNames: 'assets/[name]-[hash]'
})
В assetNames поддерживаются плейсхолдеры:
[name] — оригинальное имя файла без расширения[ext] — расширение файла[hash] — хеш содержимого[dir] — относительная директория исходного файлаПример:
assets/logo-8f3a9c2d.png
Хеш генерируется на основе содержимого файла. Это означает:
Используемый хеш обычно укорочен (не SHA-256 целиком), что оптимизирует длину имени файла при сохранении уникальности.
file от
dataurl и binaryesbuild предоставляет несколько альтернативных loaders:
| Loader | Поведение |
|---|---|
file |
копирует файл в output и возвращает URL |
dataurl |
встраивает файл как base64 data URI |
binary |
импортирует как бинарный буфер |
file используется, когда:
Результирующая строка зависит от конфигурации:
outdir — базовая директория вывода;publicPath — префикс для URL;assetNames — формирование имени файла.Пример:
publicPath: '/static/',
assetNames: 'img/[name]-[hash]'
Результат импорта:
"/static/img/logo-8f3a9c2d.png"
esbuild оптимизирует сборку:
Это снижает размер итоговой сборки при повторных импортax идентичных ресурсов.
Loader file часто участвует в обработке:
url() внутри CSS;Пример CSS:
background-image: url('./bg.png');
После сборки:
background-image: url(/assets/bg-a1b2c3d4.png);
При включении:
metafile: true
esbuild сохраняет информацию о каждом asset:
Фрагмент структуры:
{
"outputs": {
"assets/logo-8f3a9c2d.png": {
"imports": [],
"bytes": 15342
}
}
}
Это позволяет анализировать:
При включённом режиме наблюдения:
Если исходный файл находится глубже структуры проекта:
src/images/icons/logo.png
и используется:
assetNames: 'assets/[dir]/[name]-[hash]'
результат:
assets/images/icons/logo-8f3a9c2d.png
Таким образом сохраняется структура вложенности.
Loader file относится к категории лёгких операций:
Узкие места возникают только при:
Некорректные сценарии использования:
outdir, приводящее к невозможности
корректного вывода ассетов;publicPath, вызывающий некорректные URL;file для очень маленьких файлов, где
более эффективно dataurl;assetNames, приводящее к однообразным
именам.file в архитектуре сборкиLoader file выполняет функцию связующего слоя между
кодом и файловой системой. Он обеспечивает:
В системах сборки на базе esbuild он выступает базовым механизмом работы со статическими ассетами и часто используется как основа для более сложных пайплайнов обработки ресурсов.