Поддержка Sass и SCSS в Vite реализована на уровне нативного интегрированного препроцессинга через инструменты сборки, что позволяет использовать современные возможности Sass без дополнительной конфигурации бандлеров. В основе лежит Dart Sass, который является актуальной реализацией языка и поддерживается как основной движок.
Vite не реализует собственный препроцессор Sass, а делегирует
обработку файлов внешнему компилятору Sass. При обнаружении файлов с
расширениями .scss или .sass происходит
автоматическая трансформация в CSS до этапа постобработки и сборки
модулей.
Процесс включает несколько стадий:
Такой подход позволяет сохранить скорость разработки за счёт кэширования и HMR.
Для активации поддержки SCSS достаточно установить пакет Sass:
npm install sass
или
yarn add sass
Vite автоматически обнаруживает наличие пакета и начинает использовать его для обработки стилей.
Поддерживаются два основных формата:
.scss — синтаксис, совместимый с CSS, с использованием
фигурных скобок и точек с запятой;.sass — сокращённый синтаксис с отступами без фигурных
скобок.Пример .scss:
$primary-color: #42b883;
.button {
background: $primary-color;
padding: 12px 16px;
&:hover {
background: darken($primary-color, 10%);
}
}
Пример .sass:
$primary-color: #42b883
.button
background: $primary-color
padding: 12px 16px
&:hover
background: darken($primary-color, 10%)
Оба варианта обрабатываются одинаково на уровне Vite, различие заключается только в синтаксисе.
Sass-файлы могут импортироваться напрямую в JavaScript и TypeScript модули:
import './styles/main.scss'
Также поддерживается импорт внутри других SCSS файлов:
@import './variables.scss';
@import './mixins.scss';
После компиляции такие импорты разрешаются в единый CSS граф.
Vite предоставляет механизм тонкой настройки Sass через
css.preprocessorOptions в конфигурационном файле:
// vite.config.js
export default {
css: {
preprocessorOptions: {
scss: {
additionalData: `@use "@/styles/variables.scss" as *;`
}
}
}
}
Данный параметр позволяет автоматически подмешивать общие стили, переменные или миксины во все SCSS-файлы проекта.
Использование additionalData особенно полезно для:
Типичная структура проекта включает единый файл стилей:
src/styles/index.scss
который агрегирует остальные части:
@use './reset';
@use './typography';
@use './variables';
@use './components/buttons';
Далее этот файл импортируется один раз в приложении:
import './styles/index.scss'
Vite добавляет его в граф зависимостей, обеспечивая единый источник стилей.
Vite поддерживает CSS Modules из коробки, включая SCSS-варианты. Для этого используется соглашение об именовании:
Button.module.scss
Пример:
.wrapper {
display: flex;
gap: 8px;
}
.active {
color: #42b883;
}
Использование в компоненте:
import styles from './Button.module.scss'
element.className = styles.wrapper
Каждый класс автоматически хэшируется, предотвращая конфликты имен.
Vite позволяет использовать алиасы, что упрощает работу с Sass-структурой:
import { defineConfig } from 'vite'
export default defineConfig({
resolve: {
alias: {
'@': '/src'
}
}
})
После этого возможны импорты:
@use '@/styles/variables' as *;
Sass корректно разрешает пути через резолвер Vite.
Sass сохраняет полный набор возможностей препроцессинга:
Переменные:
$spacing: 16px;
$color-bg: #1e1e1e;
Миксины:
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
Использование:
.container {
@include flex-center;
}
Функции:
@function rem($px) {
@return ($px / 16) * 1rem;
}
.title {
font-size: rem(24);
}
Современный стандарт Sass предполагает отказ от @import
в пользу модульной системы:
@use подключает модуль с изоляцией пространства
имён:
@use 'variables';
.button {
color: variables.$primary;
}
@forward используется для реэкспорта:
@forward 'variables';
@forward 'mixins';
Это позволяет строить модульную архитектуру стилей, где каждый файл имеет чёткую область ответственности.
Vite автоматически генерирует source maps для SCSS в режиме разработки. Это обеспечивает корректное отображение исходных файлов в DevTools браузера.
При возникновении ошибок компиляции Sass сообщение включает:
Изменения в SCSS файлах обрабатываются через механизм HMR Vite. При изменении стилей происходит:
HMR работает как для глобальных SCSS файлов, так и для CSS Modules.
В проектах с компонентной архитектурой SCSS часто локализуется на уровне компонентов:
components/
Button/
Button.ts
Button.module.scss
Такой подход обеспечивает изоляцию стилей и предсказуемость поведения интерфейса.
Vite оптимизирует работу Sass за счёт:
Dart Sass работает синхронно в процессе сборки, но Vite минимизирует задержки за счёт архитектуры ES-модулей.
Некоторые аспекты требуют учёта при работе:
@import считается устаревшим и может замедлять
сборку;additionalData могут
приводить к дублированию, если не структурированы;Использование модульной структуры и @use снижает
вероятность конфликтов и упрощает масштабирование стилей.