Vite рассматривает CSS как полноценный модуль первого класса. Любой импорт стилей внутри JavaScript или TypeScript файлов включается в граф зависимостей и обрабатывается через единый пайплайн трансформации.
import './styles/main.css'
При таком импорте файл не просто добавляется в сборку, а проходит несколько этапов обработки:
@import,
url())Ключевая особенность архитектуры Vite заключается в том, что CSS не бандлится через JavaScript-рантайм в development-режиме, а обновляется нативно через HMR с минимальной задержкой.
CSS можно импортировать напрямую в JavaScript-модулях. Это создаёт явную связь между компонентом и стилями.
import './button.css'
Поддерживаются также динамические зависимости:
if (theme === 'dark') {
import('./themes/dark.css')
}
Каждый импорт становится частью графа зависимостей Vite, что позволяет точно отслеживать изменения и обновлять только затронутые стили.
@import и
url()Vite автоматически разбирает CSS и обрабатывает встроенные директивы.
@import@import './reset.css';
Такие импорты:
url().background {
background-image: url('./image.png');
}
Пути внутри url():
Vite автоматически управляет ресурсами, на которые ссылается CSS.
.icon {
background: url('/icons/arrow.svg');
}
Поведение зависит от режима:
dist/assets и получает
хешДополнительно поддерживаются специальные суффиксы:
?url — вернуть путь к файлу?raw — импортировать содержимое как строку?inline — инлайн содержимогоimport logoUrl from './logo.svg?url'
import logoRaw from './logo.svg?raw'
Vite имеет встроенную поддержку CSS Modules без дополнительной конфигурации.
/* button.module.css */
.button {
color: white;
background: black;
}
import styles from './button.module.css'
console.log(styles.button)
Особенности реализации:
composes)Пример с несколькими классами:
.container {
padding: 10px;
}
.primary {
color: blue;
}
<div className={`${styles.container} ${styles.primary}`} />
Обычные CSS-файлы считаются глобальными по умолчанию.
body {
margin: 0;
}
Такой стиль применяется ко всему приложению.
CSS Modules являются единственным встроенным механизмом изоляции, без необходимости ручного namespace-подхода.
Vite поддерживает основные CSS-препроцессоры без дополнительной настройки:
Пример SCSS:
$primary: #42b883;
.button {
background: $primary;
&:hover {
opacity: 0.8;
}
}
Установка зависимости достаточна для активации поддержки:
npm install sass
Дополнительная конфигурация:
// vite.config.js
export default {
css: {
preprocessorOptions: {
scss: {
additionalData: `@import "./src/styles/variables.scss";`
}
}
}
}
Это позволяет автоматически подключать переменные и миксины ко всем файлам.
Vite автоматически использует PostCSS, если найден конфигурационный файл.
Поддерживаются:
postcss.config.jspostcss.config.cjspostcss.config.mjsПример конфигурации:
export default {
plugins: [
require('autoprefixer'),
require('postcss-nested')
]
}
PostCSS применяется ко всем CSS-файлам после базового разбора Vite.
Vite реализует мгновенное обновление CSS без перезагрузки страницы.
При изменении файла:
<style> удаляется из DOMОсобенности:
Даже изменения в импортированных SCSS или CSS Modules корректно триггерят обновления.
В production-сборке Vite извлекает CSS в отдельные файлы.
dist/assets/index.abc123.css
dist/assets/index.abc123.js
Это обеспечивает:
Если используется code splitting:
import('./admin.css')
Vite создаёт отдельный CSS-чанк, связанный с соответствующим JS-модулем.
На этапе сборки выполняются оптимизации:
В новых версиях Vite может использоваться Lightning CSS для ускоренной обработки и более агрессивной оптимизации.
scoped и компонентного подходаХотя Vite не навязывает framework-специфичную модель, он корректно работает с scoped-стилями через плагины (Vue, Svelte).
Пример для Vue:
<style scoped>
.button {
color: red;
}
</style>
Vite обрабатывает такие стили через соответствующий плагин фреймворка, сохраняя совместимость с HMR и модульной системой.
CSS из зависимостей обрабатывается так же, как локальный код:
import 'normalize.css'
Особенности:
Основные параметры CSS в Vite:
export default {
css: {
modules: {
localsConvention: 'camelCaseOnly',
scopeBehaviour: 'local'
},
devSourcemap: true,
preprocessorOptions: {
less: {},
scss: {}
}
}
}
Ключевые возможности:
CSS в Vite не является вторичным форматом. Он участвует в тех же механизмах, что и Jav * aScript:
Такой подход позволяет рассматривать стили как полноценные модули приложения, а не как внешние ресурсы, подключаемые отдельно от логики.