Parcel рассматривает стили как полноценные узлы графа зависимостей.
Любой CSS-файл, SCSS или Less превращается в модуль, который может
импортировать другие стили, ресурсы и даже JavaScript-артефакты через
связанный пайплайн трансформаций. В этом контексте директива
@import перестаёт быть простым текстовым включением и
становится частью системы сборки, где каждый импорт формирует отдельную
вершину графа.
При обработке стилей Parcel строит dependency graph,
где каждый файл представляет модуль, а @import создаёт
ребро зависимости.
Пример:
/* main.css */
@import "./reset.css";
@import "./components/button.css";
body {
font-family: sans-serif;
}
На уровне исполнения это не означает буквальную вставку текста файлов. Parcel:
@importreset.css и
button.cssmain.css как зависимостиРезультат — не конкатенация строк, а сборка графа, который затем оптимизируется.
@importВ классическом браузерном CSS @import:
Parcel полностью переносит разрешение импорта на этап сборки:
Таким образом, @import перестаёт быть механизмом
загрузки и становится декларацией зависимости.
Parcel поддерживает несколько типов путей в @import:
@import "./base/typography.css";
@import "../shared/grid.css";
Алгоритм:
node_modules@import "normalize.css";
@import "bootstrap/dist/css/bootstrap.css";
Parcel:
node_modulespackage.json (main/module/exports)Это делает возможным использование стилей библиотек без ручного копирования файлов.
Parcel использует PostCSS как часть пайплайна, поэтому поведение
@import может зависеть от конфигурации:
@import с условными
расширениямиParcel различает:
@import как зависимость
сборкиВ результате импорт проходит через несколько стадий:
Parcel по умолчанию стремится минимизировать количество HTTP-запросов. Поэтому CSS-зависимости:
Пример:
/* main.css */
@import "./header.css";
@import "./footer.css";
После сборки может быть получен единый файл:
/* bundle.css */
.header { ... }
.footer { ... }
body { ... }
При этом логическая структура зависимостей сохраняется внутри графа, даже если физически код объединён.
Parcel поддерживает разделение CSS по точкам входа. Если стили импортируются через разные JS-модули, граф становится многослойным:
import "./styles/admin.css";
import "./styles/public.css";
Каждый импорт создаёт отдельную ветку графа. Parcel:
Это особенно важно при масштабных приложениях, где разные страницы используют пересекающиеся стили.
url() внутри CSS и связь с @importПомимо @import, Parcel обрабатывает и другие зависимости
в стилях:
@import "./theme/dark.css";
.button {
background-image: url("./icons/plus.svg");
}
Здесь формируется два типа зависимостей:
@import)url())Parcel унифицирует их в одном графе, где:
Каждый CSS-модуль получает:
При изменении одного импортируемого файла:
Это делает @import не затратным, несмотря на его
потенциальную вложенность.
@importПри использовании CSS Modules поведение @import
становится более контекстным:
/* button.module.css */
@import "./base.module.css";
.button {
composes: base from "./base.module.css";
}
Parcel:
Таким образом, @import остаётся на уровне структуры, а
namespace-изоляция применяется позже.
Цепочки импортов:
/* a.css */
@import "./b.css";
/* b.css */
@import "./c.css";
Parcel:
Циклические зависимости не приводят к бесконечным циклам — граф фиксируется при первом посещении узла.
Хотя стандартный CSS не поддерживает условные @import, в
экосистеме Parcel могут использоваться:
Пример Sass:
@import "theme/light";
@import "theme/dark";
Parcel:
Parcel анализирует:
Если файл не попадает в граф достижимости, он исключается из бандла.
Это делает @import безопасным с точки зрения избыточных
подключений при корректной архитектуре приложения.
@import и Hot Module ReplacementПри HMR:
Parcel отслеживает цепочку импортов, поэтому изменение в глубоко вложенном файле автоматически поднимается вверх по графу до точки входа.
@import в ParcelВнутри системы сборки:
@import — это декларация зависимостиТакой подход превращает стили в структурированную часть приложения, где зависимости управляются сборщиком, а не браузером.