Parcel включает PostCSS как часть стандартного пайплайна обработки CSS, исключая необходимость ручной настройки сложных сборщиков. В отличие от классических конфигураций, где PostCSS подключается через отдельные лоадеры и плагины сборщика, Parcel автоматически обнаруживает конфигурацию PostCSS в проекте и применяет её в момент сборки стилей.
Ключевая особенность подхода Parcel заключается в том, что PostCSS становится не внешним инструментом, а встроенным этапом трансформации CSS внутри графа зависимостей. Это обеспечивает единообразие поведения между development и production режимами без дополнительной синхронизации конфигураций.
Parcel сканирует проект на наличие стандартных конфигурационных файлов PostCSS. При их обнаружении активируется соответствующий pipeline обработки CSS.
Поддерживаемые форматы конфигурации:
postcss.config.js.postcssrc.postcssrc.json.postcssrc.jspackage.json в поле
postcssParcel выбирает конфигурацию по приоритету, начиная с локальной директории файла CSS и поднимаясь вверх по дереву директорий.
Пример базового файла конфигурации:
// postcss.config.js
module.exports = {
plugins: {
autoprefixer: {},
cssnano: process.env.NODE_ENV === 'production' ? {} : false
}
};
При этом Parcel не требует дополнительных указаний в виде подключения loader’ов — достаточно наличия конфигурации.
После обнаружения PostCSS-конфигурации Parcel формирует цепочку трансформаций:
Важно, что PostCSS в Parcel работает не как изолированный шаг, а как часть общего графа модулей. Это означает:
Parcel не ограничивает набор PostCSS-плагинов и поддерживает любую стандартную экосистему.
Наиболее распространённые сценарии:
Добавление вендорных префиксов без ручного контроля:
module.exports = {
plugins: {
autoprefixer: {}
}
};
Parcel автоматически применяет результат ко всем CSS-модулям, включая CSS-in-JS и импортированные стили.
Поддержка вложенных правил через postcss-nesting или
аналогичные плагины:
module.exports = {
plugins: {
'postcss-nesting': {}
}
};
Пример исходного CSS:
.button {
color: black;
&:hover {
color: blue;
}
}
После обработки:
.button {
color: black;
}
.button:hover {
color: blue;
}
В production режиме Parcel часто комбинирует PostCSS с минификацией:
module.exports = {
plugins: {
cssnano: {}
}
};
Parcel применяет оптимизации только при сборке production, сохраняя читаемость кода в development режиме.
Parcel поддерживает динамическую конфигурацию PostCSS через переменные окружения.
module.exports = {
plugins: {
autoprefixer: {},
cssnano: process.env.NODE_ENV === 'production' ? {} : false
}
};
Логика:
false полностью исключает плагин из pipelineЭто позволяет поддерживать единый конфиг для dev и production без дублирования файлов.
Parcel объединяет PostCSS с системой CSS Modules. Это означает, что PostCSS применяется до генерации scoped-классов.
Порядок обработки:
Это важно для корректной работы плагинов, которые модифицируют селекторы.
Например:
.title {
composes: base;
}
PostCSS-плагины видят исходную структуру до того, как Parcel применит локализацию классов.
Parcel автоматически генерирует source maps для CSS с PostCSS-трансформациями.
Особенности:
Это критично при использовании сложных цепочек плагинов, где несколько трансформаций накладываются друг на друга.
Одной из ключевых оптимизаций является AST-level caching.
Parcel сохраняет:
Если файл не изменился, PostCSS-цепочка не выполняется повторно. Это снижает стоимость пересборки при больших проектах с десятками плагинов.
В монорепозиториях Parcel поддерживает локальные PostCSS-конфиги на уровне пакетов.
Пример структуры:
packages/
ui/
postcss.config.js
app/
postcss.config.js
Каждый пакет может иметь собственный набор плагинов. Parcel выбирает ближайшую конфигурацию относительно обрабатываемого файла.
Помимо отдельных файлов конфигурации, Parcel поддерживает декларацию
PostCSS в package.json:
{
"postcss": {
"plugins": {
"autoprefixer": {},
"postcss-nested": {}
}
}
}
Это упрощает проекты, где требуется минимизация количества конфигурационных файлов.
В development-режиме PostCSS в Parcel ориентирован на:
При изменении CSS:
В production PostCSS становится частью оптимизационного pipeline:
Parcel дополнительно выполняет tree-shaking CSS на уровне модулей, уменьшая итоговый размер бандла.
Parcel накладывает несколько архитектурных особенностей на PostCSS:
Эти ограничения связаны с тем, что PostCSS встроен в собственную систему модулей, а не является внешним шагом сборки.
PostCSS может работать параллельно с другими трансформерами Parcel:
Такой порядок обеспечивает предсказуемость итогового результата независимо от комбинации технологий в проекте.