Parcel рассматривает HTML как точку входа и строит граф зависимостей, включающий не только внешние файлы, но и встроенные фрагменты кода и стилей. Любой ресурс, обнаруженный внутри HTML или подключённый через импорт в JavaScript, становится частью единого дерева модулей.
Встроенные скрипты и стили не являются «вторичными» элементами: они проходят тот же пайплайн трансформаций, что и отдельные файлы. Это означает поддержку транспиляции, минификации, хеширования и горячей перезагрузки.
Ключевая особенность подхода заключается в том, что Parcel анализирует содержимое, а не только пути. HTML, CSS и JS объединяются в единую систему зависимостей.
HTML-файлы в Parcel могут содержать как внешние, так и встроенные скрипты. Каждый вариант обрабатывается по-разному, но в рамках одного графа сборки.
<script>
const message = "Parcel";
console.log(message);
</script>
Такой код рассматривается как модульный блок внутри HTML. Parcel:
<script>Однако встроенные скрипты имеют ограничения:
Поэтому в реальных приложениях встроенный JavaScript чаще используется для небольших инициализационных фрагментов.
<script type="module">
import { init } from "./app.js";
init();
</script>
Parcel интерпретирует такой блок как полноценную точку входа модуля.
Поведение:
Важный момент: встроенный module-script не теряет связности с
остальным проектом. Он становится равноправным участником графа, как
внешний app.js.
HTML может содержать несколько блоков <script>.
Parcel разделяет их на независимые модули, но объединяет в общий runtime
при необходимости.
Порядок выполнения сохраняется в рамках HTML-документа, однако зависимости между ними рекомендуется выражать через ES-модули, а не через глобальные переменные.
Встроенные стили <style> также обрабатываются
Parcel как полноценные CSS-модули.
<style>
body {
margin: 0;
font-family: sans-serif;
}
</style>
Parcel выполняет следующие шаги:
<style><style> или отдельный
CSS-бандлВыбор стратегии зависит от конфигурации сборки и оптимизаций.
В режиме оптимизации Parcel может:
Факторы, влияющие на решение:
Инлайновые стили уменьшают количество HTTP-запросов, но ухудшают повторное использование кэша.
Parcel поддерживает прямой импорт CSS из Jav * aScript:
import "./styles.css";
Такой импорт не возвращает значение, но изменяет граф зависимостей.
При обработке такого импорта Parcel:
В development-режиме стили обычно вставляются через
<style> с возможностью горячего обновления.
CSS в Parcel не является «внешним текстом». Он становится модулем, аналогичным JavaScript-файлу.
Это даёт следующие свойства:
@import)При использовании CSS Modules:
/* styles.module.css */
.button {
background: black;
color: white;
}
import styles from "./styles.module.css";
element.className = styles.button;
Parcel:
Встроенность здесь проявляется в том, что CSS может быть подключён как зависимость прямо внутри JS, а итоговые стили автоматически синхронизируются с DOM.
Parcel не требует ручного создания <style>
элементов. При импорте CSS он автоматически:
Пример поведения в development:
<style>Parcel может трансформировать небольшие ресурсы в data URL и инлайнить их в стили или HTML.
Например:
.icon {
background: url("./icon.png");
}
Если размер изображения мал, возможна трансформация:
icon.png → base64 data URIЭто уменьшает количество запросов, но увеличивает размер бандла.
Parcel также обрабатывает встроенные стили в SVG:
<svg>
<style>
.shape { fill: red; }
</style>
</svg>
И inline-атрибуты:
<div style="color: blue;"></div>
Такие конструкции:
Inline-атрибуты не участвуют в модульной системе, но учитываются при оптимизации HTML.
Hot Module Replacement в Parcel распространяется и на CSS, включая встроенные стили.
Поведение:
При встроенных <style> блоках Parcel:
Встроенные скрипты и стили часто пересекаются в рамках одной HTML-страницы.
Пример сценария:
<style>
.active { color: green; }
</style>
<script type="module">
document.querySelector("button")
.addEventListener("click", () => {
document.body.classList.toggle("active");
});
</script>
Parcel:
При сборке встроенные ресурсы распределяются по уровням:
Parcel не смешивает эти уровни без необходимости, но допускает их объединение при оптимизации (например, инлайнинг критических стилей).
В production-сборке Parcel может выделять критические стили и помещать их прямо в HTML:
Остальные стили при этом выносятся в отдельные файлы или загружаются асинхронно.
Встроенные скрипты и стили в режиме разработки сохраняют читаемую структуру:
<script> или
<style>Parcel поддерживает сопоставление исходных фрагментов с финальным бандлом, что позволяет отслеживать изменения без потери контекста.
Встроенные скрипты и стили не являются исключением из модульной модели, а её расширением. Parcel объединяет:
Единая система зависимостей делает возможной оптимизацию на уровне всего приложения, а не отдельных файлов.