Stylus представляет собой динамический препроцессор CSS, позволяющий расширять возможности стандартных таблиц стилей за счёт переменных, вложенности, миксинов, функций и программной логики. В экосистеме сборщика Parcel поддержка Stylus реализуется через встроенный трансформер, активирующийся при наличии соответствующей зависимости в проекте.
Основная идея интеграции заключается в том, что Parcel не требует
ручной настройки для обработки .styl файлов: достаточно
установить компилятор Stylus, после чего файлы автоматически включаются
в граф зависимостей и проходят трансформацию в CSS на этапе сборки.
Обработка Stylus в Parcel активируется при наличии пакета
stylus в зависимостях проекта.
npm install stylus
или
yarn add stylus
После установки Parcel распознаёт файлы с расширением
.styl и применяет встроенный трансформер без дополнительной
конфигурации.
Stylus-файлы могут импортироваться из JavaScript, TypeScript или других стилей.
import './styles/main.styl';
Parcel регистрирует импорт как часть графа зависимостей и компилирует Stylus в CSS, после чего результат включается в итоговый бандл.
Также возможно использование импорта внутри других Stylus-файлов:
@import 'variables.styl'
@import 'mixins.styl'
Stylus отличается минималистичным синтаксисом, допускающим отсутствие фигурных скобок, двоеточий и точек с запятой.
body
font-family Arial, sans-serif
margin 0
padding 0
После компиляции Parcel преобразует этот код в стандартный CSS.
Переменные позволяют централизованно управлять значениями стилей.
primary-color = #3498db
padding-base = 16px
button
background primary-color
padding padding-base
Parcel не изменяет семантику Stylus, а передаёт код компилятору без модификаций.
Stylus поддерживает вложенные правила, упрощающие структуру стилей.
nav
ul
list-style none
li
display inline-block
a
text-decoration none
Результат компиляции превращается в плоскую структуру CSS.
Миксины позволяют создавать переиспользуемые блоки стилей.
border-radius(n)
-webkit-border-radius n
-moz-border-radius n
border-radius n
.card
border-radius(8px)
Parcel не интерпретирует миксины самостоятельно, а делегирует их обработку компилятору Stylus.
Stylus поддерживает функции с параметрами и вычислениями.
sum(a, b)
return a + b
.box
width sum(100px, 50px)
Функции выполняются на этапе компиляции, до попадания в CSS-бандл.
Stylus поддерживает разбиение стилей на модули через
@import.
@import 'reset'
@import 'variables'
@import 'components/button'
Parcel автоматически отслеживает зависимости импортируемых файлов, включая изменения вложенных модулей, что обеспечивает корректный Hot Module Replacement.
Интеграция Stylus в Parcel включает несколько ключевых этапов обработки:
.styl файлов в графе зависимостейParcel сохраняет исходные source maps, что позволяет отлаживать стили напрямую в браузере.
При изменении .styl файлов Parcel выполняет частичное
обновление стилей без полной перезагрузки страницы. Изменённые стили
заменяются в runtime через динамическую подмену
<style> или обновление CSS-модуля в зависимости от
режима сборки.
Stylus может работать совместно с CSS Modules в Parcel. При использовании соответствующего именования файлов или конфигурации классы становятся локально скоупированными.
.button
background blue
color white
При импорте в Jav * aScript:
import styles from './button.styl';
element.className = styles.button;
Parcel генерирует уникальные имена классов для предотвращения конфликтов.
После компиляции Stylus результат CSS может проходить через PostCSS-плагины, встроенные в Parcel или добавленные пользователем. Это включает автопрефиксы, минификацию и оптимизацию.
Parcel автоматически генерирует source maps для Stylus, связывая
итоговый CSS с исходными .styl файлами. Это обеспечивает
корректную отладку в DevTools.
Некорректная обработка Stylus обычно связана не с Parcel, а с окружением проекта.
При отсутствии пакета stylus Parcel не может выполнить
трансформацию.
Error: Cannot find module 'stylus'
Решение заключается в установке компилятора в зависимости проекта.
При использовании @import без корректных относительных
путей возможны ошибки резолвинга модулей. Parcel использует алгоритм
разрешения, аналогичный Node.js, включая поддержку
node_modules.
Поскольку Stylus чувствителен к отступам, нарушение структуры может привести к ошибкам компиляции:
body
font-size 16px
Корректная форма требует вложенности через отступ:
body
font-size 16px
В production-режиме Parcel выполняет дополнительную оптимизацию:
Сборка остаётся детерминированной: одинаковый входной Stylus-код всегда приводит к одинаковому CSS-выходу.
Parcel использует инкрементальную систему кэширования. Stylus-файлы компилируются повторно только при изменении содержимого или зависимостей. Это снижает время пересборки при больших стилевых кодовых базах.
Кэш хранится между запусками сборщика и учитывает:
.styl файловStylus интегрируется в общий pipeline Parcel наряду с другими препроцессорами и форматами стилей. Возможна одновременная работа с Sass, Less и PostCSS при условии корректного разделения точек входа.
Parcel управляет порядком трансформаций автоматически, обеспечивая предсказуемую сборку CSS вне зависимости от количества используемых инструментов.