Parcel автоматически оптимизирует сборку, уменьшая количество отдельных HTTP-запросов за счёт встраивания небольших ресурсов прямо в итоговый бандл. Этот процесс называется инлайнингом (inlining) и применяется к изображениям, шрифтам, SVG, медиафайлам и другим ассетам, которые импортируются в код или используются в стилях.
Ключевая идея: маленькие файлы превращаются в строки (обычно Data URL) и включаются непосредственно в JavaScript или CSS, вместо генерации отдельного файла в dist.
Parcel использует размер файла как основной критерий выбора между:
Поведение по умолчанию:
При этом учитывается не только размер исходного файла, но и результат трансформации (например, оптимизация изображения может уменьшить или увеличить итоговый объём).
Parcel использует несколько механизмов преобразования:
Наиболее распространённый вариант:
Пример результата:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...
SVG может встраиваться как строка без base64-кодирования, что уменьшает размер и улучшает читаемость при отладке.
В стилях ресурсы автоматически преобразуются:
background-image: url("data:image/svg+xml,...");
При импорте ресурсов в JS Parcel принимает решение:
import icon from "./icon.png";
console.log(icon);
В зависимости от размера:
icon становится строкой Data URLicon становится URL на отдельный файл в
distЭто поведение сохраняется независимо от способа использования (React, Vue, Vanilla JS).
CSS — одна из ключевых зон применения инлайнинга.
.button {
background: url("./small-icon.png");
}
Parcel анализирует url() и применяет те же правила:
@font-face {
font-family: "CustomFont";
src: url("./font.woff2");
}
Для очень маленьких файлов (например, subset-шрифтов) возможен инлайн, однако чаще шрифты остаются внешними из-за их размера и необходимости кеширования.
При использовании HTML как входной точки Parcel также обрабатывает:
<img src="..."><link href="...">url()Ресурсы внутри HTML проходят тот же pipeline:
Parcel учитывает не только исходный размер файла, но и результаты следующих этапов:
Это приводит к ситуации, когда:
Поведение инлайнинга регулируется через настройки bundler-а.
Основной параметр:
В Parcel v2 он может быть изменён через конфигурацию проекта
(например, .parcelrc или через настройки оптимизации
ассетов).
Пример логики:
Несмотря на удобство, инлайнинг имеет ограничения:
Каждый встроенный ресурс увеличивает размер:
Отдельные файлы могут кешироваться браузером, тогда как инлайн-ресурсы пересобираются вместе с кодом.
Большое количество base64-строк увеличивает потребление памяти при парсинге.
Поведение можно свести к набору детерминированных правил:
Малые SVG и PNG часто становятся inline, уменьшая количество сетевых запросов.
Короткие изображения и декоративные элементы удобно встраиваются в JS-бандл.
Небольшие фоновые изображения могут попадать прямо в CSS для ускорения первого рендера.
С точки зрения сборщика Parcel процесс выглядит как цепочка:
Обнаружение зависимости (import, url(),
src)
Анализ ассета
Определение итогового размера после трансформаций
Сравнение с порогом инлайнинга
Выбор стратегии:
Подстановка результата в исходный модуль
Инлайнинг изменяет архитектуру сборки:
distЭто приводит к смещению баланса между: