Stylus поддерживается в Vite на уровне нативной интеграции через
трансформационный пайплайн, построенный поверх esbuild и PostCSS. При
работе с .styl файлами Vite автоматически распознаёт
расширение, применяет соответствующий препроцессор и включает результат
в сборку без необходимости ручной настройки сложных цепочек
компиляции.
Обработка Stylus в Vite не требует отдельного loader-конфига, как в
традиционных сборщиках. Достаточно наличия установленного пакета
stylus, после чего Vite активирует встроенную поддержку
препроцессинга.
Для активации обработки .styl файлов требуется
установить сам препроцессор:
npm install stylus
или
yarn add stylus
Vite не включает Stylus в базовую поставку, что позволяет уменьшить
размер ядра и оставить выбор инструментов за проектом. При отсутствии
пакета попытка импорта .styl файла приведёт к ошибке
резолва зависимостей.
После установки можно напрямую импортировать .styl файлы
в JavaScript или TypeScript модулях:
import './styles/main.styl'
Также поддерживается импорт внутри компонентов фреймворков, например Vue или React:
import styles from './styles.module.styl'
Vite автоматически применяет компиляцию Stylus перед передачей результата в CSS pipeline.
В большинстве случаев дополнительная конфигурация не требуется.
Однако Vite позволяет передавать параметры в Stylus через
css.preprocessorOptions.
// vite.config.js
export default {
css: {
preprocessorOptions: {
stylus: {
// глобальные переменные или миксины
}
}
}
}
Этот механизм используется для определения глобальных переменных, функций и подключаемых файлов, которые должны быть доступны во всех Stylus-модулях.
Одна из ключевых возможностей интеграции — автоматическое подключение общих ресурсов:
export default {
css: {
preprocessorOptions: {
stylus: {
additionalData: `
@import "src/styles/variables.styl"
`
}
}
}
}
Такой подход позволяет избегать дублирования @import в
каждом файле и централизовать стили.
Stylus поддерживает неявные и явные переменные, что делает его гибким инструментом для построения дизайн-систем.
primaryColor = #42b983
.button
background primaryColor
padding 10px 20px
Миксины позволяют переиспользовать наборы правил:
bordered()
border 1px solid #ddd
.card
bordered()
padding 20px
Vite не вмешивается в семантику Stylus, а лишь обеспечивает корректную трансформацию в CSS.
Поддерживаются как глобальные стили, так и CSS Modules:
styles.styl — глобальные стилиstyles.module.styl — модульные стилиПример использования CSS Modules:
import styles from './button.module.styl'
button.className = styles.active
Каждый класс внутри .module.styl автоматически
хешируется, предотвращая конфликты имён.
После компиляции Stylus результат передаётся в PostCSS-пайплайн Vite. Это позволяет использовать:
Порядок обработки:
Vite обеспечивает мгновенное обновление стилей при изменении
.styl файлов. HMR работает на уровне модуля CSS без
перезагрузки страницы.
Изменения в Stylus:
обрабатываются инкрементально, что минимизирует задержки при разработке.
Stylus поддерживает нативную вложенность без фигурных скобок:
.nav
display flex
.item
color #333
&:hover
color #000
Vite сохраняет структуру после трансформации, не нарушая вложенные селекторы.
Stylus-файлы могут импортировать другие .styl
ресурсы:
@import 'mixins'
@import 'variables'
Vite резолвит пути относительно корня проекта и текущего файла, поддерживая алиасы из конфигурации:
resolve: {
alias: {
'@': '/src'
}
}
Stylus корректно работает с алиасами Vite:
@import '@/styles/variables.styl'
Это обеспечивает согласованность импортов между JavaScript и стилями.
В production-режиме Vite:
Stylus при этом компилируется заранее, не влияя на runtime-производительность.
Отсутствие stylus в node_modules При импорте
.styl файла сборка завершается ошибкой. Решение — установка
stylus.
Конфликты переменных Глобальные переменные через
additionalData могут переопределять локальные значения.
Некорректные пути импорта Stylus использует
собственный резолвер, поэтому важно учитывать настройки
resolve.alias.
Смешивание синтаксисов В одном проекте допустимо использование SCSS и Stylus, но это увеличивает сложность поддержки и требует явного разделения областей применения.
При масштабировании проекта Stylus часто используется для:
Vite обеспечивает стабильную работу Stylus даже при большом количестве файлов благодаря модульной архитектуре обработки стилей и кешированию трансформаций.