В Parcel HTML-файл выступает первичной точкой входа, от которой
строится весь граф зависимостей приложения. В отличие от классических
сборщиков, где точка входа задаётся через JavaScript (например,
index.js), Parcel ориентируется на декларативную структуру
HTML и извлекает из него все подключённые ресурсы: скрипты, стили,
изображения и любые другие ассеты.
Такой подход позволяет воспринимать HTML как центр приложения, а не как вспомогательный слой. В результате структура проекта становится более прозрачной: достаточно открыть HTML-файл, чтобы увидеть все основные связи приложения.
При запуске сборки Parcel анализирует HTML-файл как исходный модуль. Он не просто копирует его в итоговую директорию, а выполняет полноценный разбор:
<link rel="stylesheet"><script>Каждая обнаруженная зависимость превращается в отдельный модуль, который проходит через систему трансформаций Parcel.
HTML становится корневым узлом графа. Дальнейший процесс выглядит как рекурсивное раскрытие всех импортов:
Особенность Parcel заключается в автоматическом определении типов ресурсов без необходимости ручной конфигурации.
Основной способ подключения JavaScript — использование тега
<script>:
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Приложение</title>
</head>
<body>
<script src="./src/main.js"></script>
</body>
</html>
Parcel рассматривает main.js как модуль и анализирует
его содержимое. Если внутри используются import, они
автоматически включаются в граф сборки.
Важно, что Parcel поддерживает современные стандарты ECMAScript Modules без дополнительной настройки:
import { initApp } from "./app/init.js";
initApp();
CSS подключается напрямую через HTML:
<link rel="stylesheet" href="./styles/main.css" />
Parcel обрабатывает CSS как полноценный модуль. Это означает:
@importПример структуры CSS-зависимостей:
@import "./base/reset.css";
body {
font-family: sans-serif;
}
Parcel развернёт цепочку импортов и объединит их в итоговый бандл с оптимизацией.
HTML-ссылки на изображения автоматически включаются в сборку:
<img src="./assets/logo.png" alt="Logo" />
Parcel выполняет следующие действия:
Пример преобразования:
logo.png → logo.8f3a1c2d.png
Это позволяет эффективно управлять кешированием без ручной настройки.
Одной из ключевых особенностей Parcel является переписывание путей к ресурсам. Исходный HTML остаётся читаемым, но в итоговой сборке ссылки заменяются на оптимизированные версии.
Пример:
<img src="./assets/logo.png" />
После сборки:
<img src="/dist/logo.8f3a1c2d.png" />
То же самое происходит со стилями и скриптами.
Parcel поддерживает многоточечную архитектуру, где каждый HTML-файл может быть отдельной точкой входа:
project/
src/
index.html
admin.html
about.html
Каждый файл обрабатывается независимо, но при этом может разделять общие зависимости.
Это приводит к следующим эффектам:
JavaScript, подключённый через HTML, становится частью единого модульного графа. При использовании динамических импортов Parcel дополнительно разделяет код:
button.addEventListener("click", async () => {
const module = await import("./modal.js");
module.openModal();
});
Parcel выделяет modal.js в отдельный chunk, который
загружается только при необходимости.
Parcel анализирует не только стандартные теги, но и атрибуты, содержащие пути:
srchrefposterdata-* (в некоторых сценариях обработки)Пример:
<video controls poster="./assets/preview.jpg">
<source src="./assets/video.mp4" type="video/mp4" />
</video>
Каждый ресурс становится частью графа сборки и проходит трансформации.
При использовании development режима HTML-файл становится источником для hot reload. Parcel отслеживает изменения:
При изменении любого из этих элементов происходит мгновенное обновление страницы без полной перезагрузки.
HTML в этом контексте выступает как наблюдаемый корень приложения.
Parcel различает типы путей:
./, ../) — обрабатываются
как локальные модули/assets/...) — могут быть интерпретированы
как публичные ресурсыПример:
<script src="/global/runtime.js"></script>
Такие пути не проходят через модульный анализ и могут использоваться для внешних или статических файлов.
Каждый ресурс, извлечённый из HTML, проходит через цепочку трансформеров:
HTML лишь задаёт структуру, но не ограничивает обработку содержимого.
HTML остаётся полноценной точкой входа даже при минимальном использовании JavaScript. Parcel продолжает обрабатывать:
Это позволяет использовать Parcel как универсальный инструмент сборки даже для статических сайтов.
При изменении HTML Parcel пересобирает только затронутую часть графа. Если изменение касается:
перестраивается только соответствующий участок зависимостей, без полной пересборки проекта.
HTML-центрированная модель влияет на архитектуру проекта:
Такая структура упрощает масштабирование и снижает связность компонентов.
Parcel автоматически внедряет стратегии кеширования:
HTML остаётся стабильной точкой входа, в то время как ресурсы внутри него могут динамически обновляться без нарушения структуры приложения.