В Parcel изображения рассматриваются как полноценные модули, которые могут быть импортированы в JavaScript и использованы в стилях или разметке. Такой подход устраняет необходимость ручного копирования ассетов, настройки путей и дополнительной сборки ресурсов.
При обработке графических файлов Parcel выполняет несколько задач автоматически:
Поддерживаются форматы: PNG, JPEG, WebP, GIF, SVG, а также дополнительные форматы через плагины.
Изображения могут быть импортированы напрямую в JS-файлы, аналогично модулям:
import logo from './assets/logo.png';
const img = document.createElement('img');
img.src = logo;
document.body.appendChild(img);
В процессе сборки Parcel заменяет импорт на итоговый URL, указывающий на оптимизированный файл в директории сборки.
Особенности обработки:
Parcel поддерживает динамические импорты через шаблонные строки и выражения, если они могут быть статически проанализированы:
function loadIcon(name) {
return import(`./icons/${name}.png`).then(module => {
const img = new Image();
img.src = module.default;
return img;
});
}
Такой подход используется для ленивой загрузки графики, особенно в интерфейсах с большим количеством иконок.
Важно учитывать, что динамические пути должны оставаться предсказуемыми для анализа на этапе сборки.
В стилях изображения подключаются через стандартную функцию
url(). Parcel автоматически обнаруживает такие зависимости
и обрабатывает их как модули.
.header {
background-image: url('./images/header-bg.jpg');
}
При сборке:
Parcel также поддерживает относительные и абсолютные пути внутри CSS-модулей.
При использовании CSS Modules поведение остаётся аналогичным, но добавляется изоляция классов:
.card {
background-image: url('../assets/card.png');
}
Parcel обрабатывает:
В результате изображение остаётся связанным с конкретным компонентом, без конфликтов глобальных путей.
Parcel может автоматически преобразовывать небольшие изображения в base64 строки для уменьшения количества HTTP-запросов.
Условия инлайнинга:
Пример результата:
const icon = "data:image/png;base64,iVBORw0KGgoAAAANS...";
Такой подход применяется преимущественно для мелких иконок и UI-элементов.
В процессе сборки Parcel выполняет оптимизацию через встроенные или подключаемые оптимизаторы:
Оптимизация снижает размер итогового бандла без изменения исходных файлов проекта.
Каждое изображение в production-сборке получает уникальный хэш в имени файла:
logo.8f3a91c2.png
Такой механизм решает несколько задач:
Ссылка на изображение в коде автоматически синхронизируется с новым именем.
Parcel также обрабатывает изображения внутри HTML-файлов:
<img src="./assets/photo.jpg" alt="photo">
При сборке:
Это позволяет использовать HTML как полноценную точку входа без ручной настройки ассетов.
SVG-файлы могут использоваться двумя способами:
Пример использования как URL:
import icon from './icon.svg';
const img = new Image();
img.src = icon;
SVG может быть оптимизирован и минимизирован аналогично растровым изображениям.
Parcel поддерживает директории, содержимое которых копируется без изменений. Такие ресурсы не проходят через систему импорта и используются как статические файлы:
/public/images/banner.jpg
Доступ к ним осуществляется напрямую через URL:
<img src="/images/banner.jpg">
Такой подход применяется для файлов, не требующих обработки сборщиком.
В dev-режиме Parcel:
Это ускоряет цикл разработки при работе с графическими ресурсами.
При изменении изображения Parcel автоматически:
Hot Module Replacement обеспечивает обновление интерфейса без полной перезагрузки страницы, включая визуальные ресурсы.