В Vite 6 появляется формализованная модель окружений (environments), которая делает внутреннюю архитектуру сборщика более явной и управляемой. Если ранее различие между клиентской сборкой, SSR-сборкой и различными таргетами выражалось через отдельные конфигурации и условные ветвления, то новая модель вводит единый слой абстракции, описывающий каждую среду выполнения как самостоятельный объект со своим графом модулей, плагинным контекстом и стратегией бандлинга.
Environments в Vite 6 — это способ декомпозиции процесса сборки на изолированные, но координируемые контексты. Каждый environment определяет, где выполняется код, как он трансформируется и каким образом резолвятся зависимости.
Каждое окружение в Vite 6 представляет собой именованный контекст, который описывает:
Внутри Vite environment можно рассматривать как расширение идеи
build и ssr, но без жесткой привязки к одному
сценарию.
Ключевая идея заключается в том, что теперь сборка не делится на «клиентскую» и «серверную» в конфигурационном смысле. Вместо этого создаются независимые окружения, которые могут сосуществовать в рамках одного проекта.
Browser environment является стандартным окружением Vite. Оно описывает классическую клиентскую сборку:
Это окружение по умолчанию используется для фронтенд-приложений и не требует явной конфигурации.
SSR environment формализует серверную часть приложения. В отличие от
старого подхода, где SSR был надстройкой над build, теперь
SSR — это полноценное окружение с отдельным графом модулей.
Характерные особенности:
SSR environment позволяет избежать смешивания клиентских и серверных трансформаций на уровне плагинов.
Worker environment описывает выполнение кода в Web Workers или аналогичных изолированных потоках.
Особенности:
В Vite 6 environments образуют граф окружений. Это не просто список, а связанная структура, где:
Например, SSR environment может импортировать модули из browser environment в режиме виртуализации, но с трансформацией под серверный контекст.
Граф окружений позволяет Vite оптимизировать:
Одно из ключевых изменений — каждый environment имеет собственный module graph.
Это означает:
Такой подход устраняет проблему «протекания контекста», когда серверные и клиентские трансформации влияли друг на друга.
Плагины в Vite 6 получают доступ к информации об environment, в котором выполняется трансформация.
Это влияет на:
resolveIdloadtransformrenderChunkПлагин может адаптировать поведение в зависимости от окружения:
Таким образом, plugin API становится environment-aware.
Vite 6 вводит возможность явно описывать окружения в конфигурации:
Каждое окружение может иметь собственные параметры:
buildrollupOptionsresolveoptimizeDepsЭто позволяет строить сложные архитектуры, где, например, один проект одновременно содержит:
Кастомные environments позволяют выходить за пределы стандартных browser/SSR/worker моделей.
Типичные сценарии:
Каждое кастомное окружение может определять собственный:
Environments вводят строгую изоляцию зависимостей:
Это снижает риск конфликтов версий и поведения пакетов между SSR и browser сборками.
Несмотря на изоляцию, Vite 6 поддерживает сценарии совместного использования модулей.
Подход основан на:
Модуль может быть:
Это позволяет избегать дублирования кода без потери предсказуемости.
Во время выполнения Vite использует environment context для:
Например:
Модель environments влияет на весь pipeline Vite:
Каждое окружение может иметь собственный pre-bundle cache.
Tree-shaking становится environment-specific, так как разные runtime могут требовать разные части API.
Разбиение на чанки зависит от того, пересекаются ли окружения по модулям.
Старая модель Vite (без явного environments API) продолжает работать через дефолтные окружения:
ssr режимуТаким образом, миграция является постепенной, а не разрушающей.
Environments становятся базовой единицей масштабирования Vite. Вместо двухрежимной модели «client/server» формируется универсальная система исполнения, где каждый target определяется декларативно.
Это открывает возможности: