Parcel как сборщик модулей ориентирован на минимальную конфигурацию и автоматическую обработку ресурсов, включая HTML-атрибуты, содержащие ссылки на внешние файлы. В процессе сборки он анализирует дерево зависимостей не только в JavaScript, но и в HTML, CSS и шаблонах, извлекая ресурсы из атрибутов и преобразуя их в управляемые зависимости.
Parcel использует статический анализ HTML и JSX-подобных структур для поиска атрибутов, которые потенциально содержат ссылки на внешние ресурсы. Такие атрибуты преобразуются в зависимости, после чего файлы попадают в граф сборки.
Ключевая идея заключается в том, что любые ссылки на ресурсы рассматриваются как модули, а не как «строки внутри разметки».
Parcel автоматически:
srcНаиболее распространённый сценарий — обработка src в
тегах <img>, <video>,
<audio>.
Пример:
<img src="./images/photo.jpg" />
Parcel воспринимает ./images/photo.jpg как зависимость.
В процессе сборки происходит:
Результат:
<img src="/dist/photo.a8f3c1.jpg" />
Parcel поддерживает:
./, ../);src.Пример через JS:
import imgUrl from './images/photo.jpg';
const img = document.createElement('img');
img.src = imgUrl;
В этом случае файл обрабатывается аналогично HTML-атрибуту.
hrefАтрибут href в Parcel рассматривается в зависимости от
контекста:
<link rel="stylesheet">);Пример подключения стилей:
<link rel="stylesheet" href="./styles/main.css" />
Parcel:
Если href указывает на HTML:
<a href="./about.html">О проекте</a>
Parcel может включить страницу в сборку как отдельный entry point при определённых конфигурациях или плагинах маршрутизации.
srcsetsrcset представляет собой более сложный случай, так как
содержит список ресурсов с условиями выбора.
Пример:
<img
src="./img/photo-1x.jpg"
srcset="
./img/photo-1x.jpg 1x,
./img/photo-2x.jpg 2x,
./img/photo-3x.jpg 3x
"
/>
Parcel:
srcset;Parcel учитывает специфику srcset:
1x, 2x,
w;Пример результата:
<img
src="/dist/photo-1x.3f21.jpg"
srcset="
/dist/photo-1x.3f21.jpg 1x,
/dist/photo-2x.91ab.jpg 2x,
/dist/photo-3x.c44d.jpg 3x
"
/>
data-srcdata-src не является стандартным ресурсным атрибутом
браузера, но Parcel обрабатывает его как потенциальную зависимость при
наличии соответствующих плагинов или HTML-трансформеров.
Пример:
<img data-src="./images/heavy.jpg" class="lazy" />
Parcel:
data-src;src, если включена
трансформация lazy-loading.Часто применяется совместно с Jav * aScript:
const img = document.querySelector('img.lazy');
img.src = img.dataset.src;
Parcel в этом случае:
Parcel разделяет атрибуты на две категории:
srchrefsrcsetОни обрабатываются по умолчанию.
data-srcdata-hrefОни обрабатываются только при наличии:
Процесс обработки атрибутов включает несколько этапов:
Parcel строит AST (Abstract Syntax Tree) документа и анализирует узлы с атрибутами.
Каждое значение атрибута проверяется:
Все найденные ресурсы добавляются в единый dependency graph, где:
В зависимости от типа файла:
После обработки Parcel заменяет исходные пути на итоговые:
Parcel различает локальные и внешние ресурсы.
Пример внешнего URL:
<img src="https://example.com/image.jpg" />
Такие ссылки:
Это важно для корректной работы CDN и сторонних сервисов.
<img src="images/photo.jpg" />
При отсутствии корректной структуры проекта Parcel может не найти файл.
img.src = "./images/" + name + ".jpg";
Такие выражения не анализируются статически и выпадают из графа зависимостей.
<img data-lazy-src="./img.jpg" />
Без трансформации Parcel игнорирует такие зависимости.
Parcel поддерживает расширение обработки HTML через плагины, которые позволяют:
data-* полей;Это делает систему обработки атрибутов гибкой и расширяемой без изменения ядра сборщика.
src, href,
srcset рассматривается как зависимость.