Parcel рассматривает изображения как полноценные модули в графе зависимостей приложения. Любой файл PNG, JPEG, WebP, AVIF или SVG может быть импортирован напрямую из JavaScript, CSS или HTML, после чего автоматически попадает в процесс сборки, оптимизации и хеширования. Такой подход устраняет необходимость ручной настройки загрузчиков и позволяет использовать единый механизм обработки ассетов.
Parcel обрабатывает изображения как статические ресурсы, применяя к ним следующие этапы:
Пример импорта в Jav * aScript:
import logo from './assets/logo.png';
const img = document.createElement('img');
img.src = logo;
document.body.appendChild(img);
В результате logo становится строкой с URL, указывающей
на оптимизированный файл в сборке.
PNG используется для изображений с прозрачностью и высокой детализацией. Parcel обрабатывает PNG следующим образом:
PNG часто используется для:
Пример использования в CSS:
.icon {
background-image: url('./icons/settings.png');
}
Parcel автоматически извлекает этот файл в сборку и заменяет путь.
JPEG предназначен для фотографических изображений. Parcel применяет к нему оптимизацию, сохраняя баланс между качеством и размером.
Основные особенности обработки:
Пример:
import photo from './images/photo.jpg';
document.querySelector('img').src = photo;
JPEG особенно эффективен для:
WebP обеспечивает более эффективное сжатие по сравнению с JPEG и PNG при сохранении качества. Parcel поддерживает WebP как нативный формат и может:
Пример использования:
import image from './images/hero.webp';
const el = document.createElement('img');
el.src = image;
WebP применяется для:
AVIF является одним из самых эффективных форматов с точки зрения сжатия при сохранении качества. Parcel поддерживает AVIF в современных сборках и способен интегрировать его в мультформатные стратегии.
Особенности AVIF в Parcel:
<picture>.Пример:
<picture>
<source srcset="./image.avif" type="image/avif">
<source srcset="./image.webp" type="image/webp">
<img src="./image.jpg" alt="example">
</picture>
Parcel обрабатывает каждый источник как отдельный модуль и оптимизирует их независимо.
SVG в Parcel может использоваться несколькими способами:
import icon from './icon.svg';
img.src = icon;
В этом случае SVG обрабатывается как обычный файл.
Parcel может встроить SVG прямо в код как строку или Data URL, если это требуется оптимизацией.
При использовании соответствующих трансформеров SVG может быть преобразован в компонент:
import { ReactComponent as Logo } from './logo.svg';
export function Header() {
return <Logo />;
}
SVG остаётся наиболее гибким форматом благодаря масштабируемости без потери качества.
Parcel поддерживает прямую работу с изображениями внутри HTML-файлов:
<img src="./images/banner.jpg" alt="banner">
<link rel="icon" href="./favicon.png">
Все пути автоматически резолвятся относительно файловой системы проекта и заменяются на итоговые URL при сборке.
CSS-файлы также являются частью графа зависимостей Parcel:
.hero {
background-image: url('./hero.avif');
}
Parcel:
Parcel использует встроенную систему трансформации ассетов, которая может включать:
Оптимизация включается автоматически в production-сборке.
Каждое изображение получает уникальный хеш в имени файла:
logo.8f3a9c1d.png
photo.a12bc45e.jpg
Это обеспечивает:
Parcel не ограничивает использование стандартных HTML-механизмов адаптивных изображений:
<img
src="./image-800.jpg"
srcset="./image-400.jpg 400w, ./image-800.jpg 800w, ./image-1600.jpg 1600w"
alt="responsive"
/>
Каждый вариант обрабатывается отдельно как зависимость и оптимизируется независимо.
Поддержка современных форматов реализуется через
<picture>:
<picture>
<source srcset="./image.avif" type="image/avif">
<source srcset="./image.webp" type="image/webp">
<img src="./image.jpg" alt="fallback">
</picture>
Parcel:
<source>;Изображения могут размещаться в публичной директории, минуя обработку:
/public/images/static.png
Такие файлы:
Использование:
<img src="/images/static.png">
Parcel анализирует окружение и может:
При большом количестве SVG Parcel позволяет объединять их в спрайты (через дополнительные плагины или трансформеры), что снижает количество HTTP-запросов и ускоряет загрузку интерфейсов.
Импорт изображения в JavaScript всегда возвращает URL:
import avatar from './avatar.png';
fetch(avatar).then(res => res.blob());
Это позволяет использовать изображения:
В dev-режиме Parcel:
При работе с крупными файлами Parcel:
В Parcel изображения перестают быть внешними файлами, становясь частью модульной системы:
Все форматы объединены единым механизмом импорта, оптимизации и доставки, что позволяет строить предсказуемую и масштабируемую систему работы с графическими ресурсами в JavaScript-приложениях.