При работе с Parcel многократные HTML-файлы рассматриваются как независимые точки входа приложения. Каждый HTML-документ становится самостоятельным графом зависимостей, который Parcel анализирует, собирает и оптимизирует. Такой подход характерен для мультистраничных приложений (MPA), где каждая страница представляет отдельный маршрут с собственным набором скриптов и стилей.
Parcel не требует конфигурационного файла для поддержки нескольких HTML-страниц. Достаточно передать все HTML-файлы в качестве entry points при запуске сборки.
Типичная структура проекта с несколькими HTML-файлами:
project/
├── src/
│ ├── index.html
│ ├── about.html
│ ├── contact.html
│ ├── index.js
│ ├── about.js
│ ├── contact.js
│ └── styles/
│ └── main.css
└── package.json
Каждый HTML-файл содержит собственную точку входа в Jav * aScript:
<!-- index.html -->
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./styles/main.css" />
</head>
<body>
<h1>Главная</h1>
<script type="module" src="./index.js"></script>
</body>
</html>
<!-- about.html -->
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<h1>О проекте</h1>
<script type="module" src="./about.js"></script>
</body>
</html>
<!-- contact.html -->
<!doctype html>
<html>
<head>
<meta charset="UTF-8" />
</head>
<body>
<h1>Контакты</h1>
<script type="module" src="./contact.js"></script>
</body>
</html>
Parcel принимает несколько входных файлов напрямую через CLI:
parcel src/index.html src/about.html src/contact.html
Каждый HTML-файл обрабатывается как отдельный граф:
<script> и
<link>dist/Результат сборки:
dist/
├── index.html
├── about.html
├── contact.html
├── index.hash.js
├── about.hash.js
└── contact.hash.js
Hash-суффиксы обеспечивают кэш-безопасность и автоматическое обновление ресурсов.
Parcel строит отдельные dependency graph для каждой страницы, но при этом выполняет глобальную оптимизацию:
Пример общего модуля:
// src/utils/api.js
export function request(url) {
return fetch(url).then(r => r.json());
}
Использование в разных страницах:
// index.js
import { request } from "./utils/api";
request("/api/home");
// about.js
import { request } from "./utils/api";
request("/api/about");
Parcel выделяет api.js в общий бандл, если он
используется более чем в одной точке входа.
В мультистраничной архитектуре навигация осуществляется через обычные ссылки:
<nav>
<a href="./about.html">О проекте</a>
<a href="./contact.html">Контакты</a>
</nav>
Parcel сохраняет структуру путей и корректно переносит их в
dist, не требуя специальной маршрутизации.
Каждый HTML-файл может независимо импортировать ресурсы:
<link rel="stylesheet" href="./styles/main.css" />
<img src="./images/logo.png" />
Parcel выполняет следующие операции:
dist с хешированиемПример результата:
<link rel="stylesheet" href="/main.8fd3a2.css" />
<img src="/logo.1c9d4e.png" />
Каждая HTML-страница получает собственный JavaScript-бандл:
index.html → index.jsabout.html → about.jscontact.html → contact.jsЭто позволяет:
Parcel использует алгоритм анализа графа модулей для выявления пересечений.
Если несколько страниц используют одну библиотеку:
import lodash from "lodash";
Parcel:
Дополнительное разделение достигается через
import():
button.addEventListener("click", async () => {
const module = await import("./heavy-module.js");
module.init();
});
Parcel:
heavy-module.jsParcel использует многопоточную архитектуру:
Это особенно важно при большом количестве страниц (10–100+).
Запуск в режиме разработки:
parcel src/index.html src/about.html src/contact.html
Поведение:
Изменение about.js не приводит к пересборке
index.html.
Parcel поддерживает структуру с подкаталогами:
src/
├── pages/
│ ├── index.html
│ ├── about.html
│ └── contact.html
Запуск:
parcel src/pages/*.html
Или через явное перечисление:
parcel src/pages/index.html src/pages/about.html src/pages/contact.html
При этом выходная структура сохраняется:
dist/
├── index.html
├── about.html
├── contact.html
Parcel использует контентно-адресуемый кэш:
Это критично для больших MPA-проектов, где количество HTML-файлов велико.
При наличии шаблонной структуры:
<!-- layout.html -->
<header>...</header>
<main></main>
<footer>...</footer>
Parcel не выполняет серверную композицию, но позволяет:
Parcel автоматически вычисляет корректные пути:
distПример:
/pages/about.html → /about.html
Дублирование entry point логики
Если несколько HTML подключают один и тот же JS напрямую без структуры модулей, может возникнуть избыточная загрузка.
Неправильные относительные пути
Ошибки вида:
<script src="../index.js"></script>
в разных директориях могут привести к некорректной сборке.
Игнорирование shared modules
Отсутствие централизованных модулей увеличивает размер бандлов.
При увеличении числа HTML-файлов Parcel сохраняет производительность за счёт:
Такой подход позволяет строить проекты с десятками и сотнями страниц без ручной конфигурации сборщика.