Обзор структуры сгенерированного проекта

Сгенерированный Vite-проект формируется как минималистичная, но функционально завершённая заготовка, в которой уже заложены ключевые точки входа, конфигурация сборки и базовая структура исходного кода. Основной принцип — отсутствие избыточной архитектуры при сохранении расширяемости.

В корне проекта обычно располагаются следующие элементы:

  • package.json
  • vite.config.js или vite.config.ts
  • index.html
  • папка src
  • папка public (в некоторых шаблонах)
  • служебные файлы окружения (.gitignore, .env)

Каждый из этих элементов выполняет строго определённую роль в экосистеме Vite.


package.json как центр управления зависимостями

Файл package.json в Vite-проекте выполняет роль управляющего манифеста, где определяются:

  • зависимости проекта (dependencies)
  • зависимости разработки (devDependencies)
  • скрипты запуска
  • метаинформация о проекте

Типичный набор скриптов включает:

  • dev — запуск локального сервера разработки
  • build — сборка production-версии
  • preview — локальный просмотр собранного проекта

Особенность Vite заключается в том, что dev-режим использует нативные ES-модули, а сборка делегируется Rollup-подобному процессу, что отражается в зависимостях и конфигурации.


vite.config.js и слой конфигурации сборщика

Файл vite.config.js является центральной точкой настройки поведения сборщика. Он экспортирует конфигурационный объект, поддерживающий строгую типизацию (при использовании TypeScript) и модульную структуру.

Ключевые секции конфигурации:

plugins

Секция plugins определяет расширения функциональности:

  • интеграция с фреймворками (Vue, React, Svelte)
  • поддержка JSX
  • автоматическая обработка CSS препроцессоров
  • оптимизация кода

Плагины подключаются как функции, возвращающие объект с хуками жизненного цикла сборки.


resolve

Раздел resolve отвечает за:

  • алиасы импортов
  • разрешение модулей
  • приоритет расширений файлов

Часто используется настройка алиаса @ для упрощения доступа к src:

  • логическое сокращение длинных путей
  • стандартизация структуры импортов

server

Секция server управляет dev-сервером:

  • порт запуска
  • автоматическое открытие браузера
  • проксирование API-запросов
  • CORS-параметры

Vite dev-сервер отличается мгновенным стартом благодаря отсутствию предварительной полной сборки проекта.


build

Раздел build определяет параметры production-сборки:

  • выходную директорию
  • стратегию чанкинга
  • минификацию
  • target-окружение (ES2015, ESNext и т.д.)

Vite использует Rollup как основу сборки, что обеспечивает детализированное управление бандлом.


index.html как точка входа приложения

В отличие от традиционных сборщиков, Vite использует index.html как первичную точку входа. Это ключевое архитектурное отличие.

Внутри файла:

  • подключается основной модуль через <script type="module">
  • задаётся корневой контейнер приложения
  • могут размещаться мета-теги и ссылки на ресурсы

Пример логики:

  • браузер загружает HTML
  • HTML инициирует ES-модуль
  • модуль подтягивает зависимости по цепочке импортов

Такой подход делает HTML активной частью графа модулей, а не пассивным контейнером.


Папка src как зона разработки

Папка src содержит весь прикладной код приложения. Она структурируется в зависимости от выбранного шаблона (vanilla, Vue, React и т.д.), но базовые элементы повторяются.

main.js / main.ts

Файл входа JavaScript-приложения:

  • инициализация приложения
  • подключение корневого компонента
  • монтирование в DOM

В React-проектах здесь создаётся корневой рендер:

  • createRoot
  • App компонент

В Vue-проектах:

  • создание приложения через createApp
  • подключение App.vue

App.vue / App.jsx / App.tsx

Корневой компонент приложения:

  • содержит базовую структуру интерфейса
  • подключает маршрутизацию
  • формирует глобальные layout-компоненты

В шаблонных проектах этот файл часто включает минимальную демонстрационную разметку.


assets

Каталог assets предназначен для:

  • изображений
  • шрифтов
  • SVG-иконок
  • статических медиа-файлов, обрабатываемых сборщиком

Особенность Vite заключается в том, что импорт ассетов выполняется напрямую в JS/TS модулях:

  • файлы проходят через pipeline обработки
  • автоматически оптимизируются
  • получают хеширование имени для кеширования

components (в фреймворках)

При использовании Vue или React часто присутствует папка components:

  • переиспользуемые UI-блоки
  • изолированные элементы интерфейса
  • композиционные части страниц

Архитектура не навязывается, но структура по умолчанию предполагает модульность.


public как зона необрабатываемых файлов

Папка public содержит ресурсы, которые:

  • не проходят через систему сборки
  • копируются в выходной билд без изменений
  • доступны по прямому URL

Типичные случаи использования:

  • favicon
  • robots.txt
  • статические изображения
  • файлы, требующие фиксированного пути

Разница между assets и public принципиальна:

  • assets — управляется сборщиком
  • public — копируется как есть

.env файлы и переменные окружения

Vite поддерживает систему переменных окружения через .env файлы:

  • .env
  • .env.development
  • .env.production

Особенность:

  • переменные доступны через import.meta.env
  • для клиента требуется префикс VITE_

Пример структуры:

  • VITE_API_URL
  • VITE_MODE

Эта система обеспечивает изоляцию конфигураций для разных окружений без изменения кода.


node_modules и внутренняя экосистема

Папка node_modules содержит:

  • установленные зависимости
  • плагины Vite
  • фреймворки и утилиты

Vite активно использует pre-bundling зависимостей через esbuild:

  • ускорение холодного старта
  • оптимизация CommonJS-модулей
  • кэширование зависимостей

dist как результат сборки

После выполнения production-сборки создаётся директория dist:

  • минифицированный JavaScript
  • оптимизированный CSS
  • обработанные ассеты
  • HTML с внедрёнными ссылками на бандлы

Структура dist отражает финальный результат, готовый к деплою на сервер или CDN.


Внутренняя логика связей между файлами

Структура проекта в Vite формируется вокруг графа зависимостей:

  • index.html инициирует загрузку модулей
  • main.js становится корнем JS-графа
  • импорты формируют дерево зависимостей
  • плагины вмешиваются на этапе трансформации
  • сборка превращает граф в оптимизированные чанки

Это отличает Vite от классических сборщиков, где входной точкой является JavaScript, а HTML генерируется постфактум.


Особенности структуры в разных шаблонах

Vanilla

  • минимальный набор файлов
  • отсутствует компонентная структура
  • акцент на чистый JavaScript

Vue

  • App.vue как корневой компонент
  • наличие components, views
  • поддержка SFC (Single File Components)

React

  • main.jsx
  • App.jsx
  • использование JSX и хуков
  • часто добавляется hooks, pages, components

TypeScript-версии

  • .ts и .tsx файлы
  • строгая типизация входных точек
  • дополнительный tsconfig.json

Роль конфигурационных файлов окружения

Дополнительно в проекте могут присутствовать:

  • tsconfig.json — настройка TypeScript
  • eslint.config.js — правила линтинга
  • prettier.config.js — форматирование кода

Эти файлы не относятся напрямую к Vite, но интегрируются в общую разработческую цепочку.


Логика масштабирования структуры

С ростом проекта базовая структура Vite остаётся неизменной, но расширяется за счёт:

  • модульных директорий (services, store, router)
  • слоёв архитектуры (presentation, domain, data)
  • выделения бизнес-логики из UI

Vite не навязывает архитектуру, что позволяет сохранять исходную простоту структуры даже в крупных приложениях.