Vite обрабатывает CSS как полноценный модуль первого класса: стили импортируются прямо в JavaScript, разбиваются на чанки, хэшируются, проходят постобработку и инъекцию в DOM или выделяются в отдельные файлы при сборке. В этом процессе ключевую роль играет CSS-трансформер, который отвечает за:
Исторически в экосистеме Vite основным решением для постобработки CSS является PostCSS. Однако с ростом сложности проектов и увеличением требований к скорости сборки появилась альтернатива — Lightning CSS, ориентированная на высокую производительность и встроенный набор трансформаций.
PostCSS работает как расширяемый процессор CSS, основанный на плагинах. Он не выполняет трансформации сам по себе, а делегирует их плагинам.
Типичный набор включает:
Конфигурация обычно задаётся через
postcss.config.js:
export default {
plugins: [
require('autoprefixer'),
require('postcss-nested'),
require('postcss-preset-env'),
require('cssnano')
]
}
Сильные стороны PostCSS:
Слабые стороны:
Lightning CSS представляет собой высокопроизводительный CSS-процессор, написанный на Rust. В отличие от PostCSS, он не является плагинным фреймворком. Это монолитный трансформер, который сразу выполняет набор задач:
Главная особенность — отсутствие плагинной архитектуры в привычном смысле. Вместо композиции мелких плагинов используется единый оптимизированный пайплайн.
Vite поддерживает Lightning CSS как альтернативный трансформер CSS на уровне конфигурации сборщика.
Основной режим включается через параметр:
// vite.config.js
export default {
css: {
transformer: 'lightningcss'
}
}
Дополнительно может использоваться настройка целей браузеров:
export default {
css: {
transformer: 'lightningcss',
lightningcss: {
targets: {
chrome: 100,
firefox: 100,
safari: 15
}
}
}
}
В этом режиме PostCSS становится необязательным, а его задачи частично или полностью перекладываются на Lightning CSS.
PostCSS:
Lightning CSS:
PostCSS:
Lightning CSS:
PostCSS:
Lightning CSS:
PostCSS:
Lightning CSS:
В PostCSS минификация обычно делегируется cssnano. Это
отдельный слой, который проходит после всех трансформаций.
В Lightning CSS минификация встроена:
Это снижает количество этапов сборки и уменьшает вероятность конфликтов между плагинами.
Autoprefixer в PostCSS долгое время был стандартом де-факто. Он анализирует CSS и добавляет вендорные префиксы на основе caniuse-данных.
Lightning CSS выполняет аналогичную задачу, но иначе:
В результате отпадает необходимость в отдельном инструменте для префиксов.
Переход от PostCSS к Lightning CSS влияет не только на конфигурацию, но и на структуру CSS-пайплайна в целом.
При использовании PostCSS:
postcss.config.jsПри использовании Lightning CSS:
vite.config.jsНесмотря на высокую производительность, Lightning CSS имеет ряд ограничений:
Это делает его менее гибким инструментом в сравнении с PostCSS в проектах, где требуется нестандартная обработка стилей.
PostCSS остаётся актуальным в случаях:
Lightning CSS эффективен, когда:
В Vite переход на Lightning CSS уменьшает роль JavaScript в обработке стилей. CSS начинает обрабатываться ближе к компиляции, а не через цепочку JS-преобразований.
Это отражается на:
При этом Vite сохраняет свою модель ESM-ориентированного пайплайна, где CSS остаётся модулем с собственной системой импорта и кэширования.