В сборщике Parcel файлы, не требующие трансформации, рассматриваются как статические ресурсы. К ним относятся изображения, шрифты, аудиофайлы, видео, а также любые произвольные бинарные или текстовые данные, которые должны быть доставлены в итоговую сборку без изменения содержимого.
Главная особенность модели работы Parcel заключается в том, что такие файлы не проходят через цепочку трансформеров и плагинов. Вместо этого они копируются в выходной каталог с возможным изменением имени для обеспечения кэш-безопасности.
Копирование без обработки означает сохранение исходного содержимого файла при переносе в директорию сборки, но с участием системы хеширования и управления зависимостями.
Parcel анализирует зависимости проекта начиная с входных точек. При встрече импорта файлов, не являющихся JavaScript или CSS-модулями, выполняется классификация ресурса.
К статическим ресурсам относятся:
.png, .jpg,
.webp, .gif, .svg при
определённых условиях).woff, .woff2, .ttf,
.otf).mp4, .mp3,
.webm).pdf, .zip,
.wasm)После классификации ресурс попадает в систему ассетов, где определяется стратегия обработки. Для неподдерживаемых преобразованиями типов применяется стратегия копирования.
Хотя термин «копирование без обработки» предполагает прямое перенесение файла, Parcel почти всегда добавляет этап переименования.
Файл копируется в выходную директорию, но его имя модифицируется добавлением контентного хеша:
logo.png → logo.8f3a91c2.png
Такой подход решает несколько задач:
Контентный хеш вычисляется на основе бинарного содержимого файла. Даже минимальное изменение приводит к изменению итогового имени.
Parcel позволяет импортировать статические ресурсы напрямую в JavaScript и CSS.
import logoUrl from './assets/logo.png';
const img = document.createElement('img');
img.src = logoUrl;
document.body.appendChild(img);
В этом случае файл не преобразуется, а копируется в сборку, после чего возвращается строка с итоговым URL.
.background {
background-image: url('./images/bg.jpg');
}
Parcel анализирует url() и автоматически подключает файл
как зависимость. Далее файл копируется в выходной каталог, а ссылка
переписывается на итоговый путь.
Для случаев, когда требуется полностью исключить обработку и
хеширование, используется специальная директория
public.
Файлы из public копируются в корень сборки без изменения
структуры и без добавления хешей.
Типичное поведение:
public/favicon.ico → dist/favicon.ico
public/robots.txt → dist/robots.txt
Особенности:
Такая модель применяется для ресурсов, к которым требуется стабильный прямой доступ по фиксированному пути.
| Характеристика | Импорт в коде | public директория |
|---|---|---|
| Хеширование | применяется | отсутствует |
| Участие в графе зависимостей | да | нет |
| Оптимизация | возможна | отсутствует |
| Изменение имени | да | нет |
| Контроль через код | да | нет |
Импортируемые ресурсы интегрируются в систему сборки, тогда как
public используется как статическое хранилище.
Parcel автоматически преобразует относительные пути в корректные URL, учитывая структуру выходной директории.
При сборке происходит:
distПример трансформации:
src/index.js
src/assets/icon.svg
Результат:
import icon from './assets/icon.svg';
// icon = "/icon.3d2f9c1a.svg"
Если проект развернут в подкаталоге, Parcel учитывает
publicUrl, корректируя пути автоматически.
При изменении содержимого статического ресурса Parcel выполняет пересборку только затронутых модулей.
Изменение приводит к:
Такой подход минимизирует объём пересборки и ускоряет инкрементальную работу.
Parcel использует файловый кеш для ускорения повторных сборок. Для статических файлов применяется проверка по хешу содержимого.
Если содержимое совпадает с закэшированной версией, копирование не выполняется повторно. Вместо этого используется ранее сохранённый результат.
Основные принципы:
SVG-файлы могут рассматриваться по-разному в зависимости от способа подключения.
import icon from './icon.svg';
SVG копируется как файл и возвращается URL.
При использовании специфических настроек SVG может быть инлайнен или преобразован в React-компонент (при подключении соответствующих плагинов). Однако в базовом режиме он остаётся статическим файлом.
WebAssembly-модули и бинарные файлы также попадают в категорию копируемых ресурсов.
import wasmUrl from './module.wasm';
WebAssembly.instantiateStreaming(fetch(wasmUrl));
Parcel переносит .wasm файл в сборку без изменений,
обеспечивая корректную загрузку через HTTP.
В крупных проектах часто используется вложенная структура ассетов:
src/
assets/
images/
fonts/
media/
Parcel сохраняет структуру при копировании, если ресурс импортирован с сохранением относительного пути. Однако итоговое имя может быть изменено из-за хеширования.
Пример:
src/assets/images/photo.jpg
→ dist/photo.91ac3d.jpg
или, при сохранении структуры в зависимости от настроек:
dist/assets/images/photo.91ac3d.jpg
При неправильной организации ресурсов возникают следующие ситуации:
publicUrl
вызывает ошибки загрузкиpublic и импортируемых ресурсов приводит к
несогласованным путямParcel строго разделяет два подхода: управляемые зависимости и статическое копирование без участия сборщика.
В production-режиме копирование статических файлов сопровождается дополнительными оптимизациями:
Файлы остаются неизменёнными по содержимому, но их представление в выходной структуре оптимизируется для веб-доставки.