1. Старт проекта: Tooling, Vite, структура, TypeScript, линтинг
Старт проекта: Tooling, Vite, структура, TypeScript, линтинг
В этом курсе мы будем писать реальные React‑приложения: с типизацией, единым стилем кода, быстрым запуском и структурой, которую удобно поддерживать. Эта статья — про то, как правильно начать проект, чтобы дальше не тратить время на хаос в папках, несовместимые настройки и «плавающие» ошибки.
Что такое tooling и почему это важно
Tooling — это набор инструментов вокруг кода, которые помогают:
React сам по себе — это библиотека UI. Для полноценной разработки нужны инструменты вокруг него.
Почему в курсе используем Vite
Vite — современный сборщик и dev‑сервер для фронтенда.
Причины выбора:
Если вы раньше видели Create React App, важно знать: CRA больше не является рекомендуемым способом начать новый проект в экосистеме React. В практике чаще используют Vite/Next.js/Remix, а для учебного практического курса Vite — оптимальный баланс скорости и простоты.
Требования к окружению
Перед началом установите:
Проверить версии:
Менеджеры пакетов:
Далее в примерах будет npm, но команды легко адаптируются.
Создаём проект на Vite + React + TypeScript
Создание проекта:
Что вы получите:
Полезно знать основные команды:
npm run dev — запуск в режиме разработкиnpm run build — сборка для продакшенаnpm run preview — локальный просмотр собранной версииРазбираем базовую структуру проекта
Типичная структура Vite React TS проекта выглядит так:
Ключевые элементы:
index.html — точка входа для Vite (он подключает ваш JS/TS бандл)src/main.tsx — место, где React «встраивается» в страницу и рендерит приложениеsrc/App.tsx — корневой компонент приложенияvite.config.ts — конфигурация Vitetsconfig.json — конфигурация TypeScriptПредлагаемая структура для учебного проекта
Чтобы по мере роста проекта не возник «компонентный свалник», зафиксируем структуру, которой будем придерживаться в курсе.
!Рекомендуемая структура папок и направление зависимостей
Рекомендуемый вариант:
Коротко о назначении папок:
app/ — сборка приложения: роутинг, провайдеры (контекст, стор), глобальные стилиpages/ — страницы (экранные компоненты, привязанные к маршрутам)widgets/ — крупные блоки UI, которые собирают несколько фичfeatures/ — пользовательские сценарии: «поиск», «логин», «добавить в избранное»entities/ — сущности предметной области: «User», «Product», «Article» (UI + типы + запросы)shared/ — переиспользуемые кирпичики: UI‑компоненты, утилиты, API‑клиент, конфигиassets/ — статические файлы (картинки, шрифты)Важно правило: зависимости должны быть направлены сверху вниз.
shared ни от кого не зависит (или почти ни от кого)entities могут использовать sharedfeatures могут использовать entities и sharedwidgets и pages собирают всё вместеapp склеивает приложение как продуктЭто защищает от ситуации, когда «базовый компонент» тянет за собой половину приложения.
TypeScript в React‑проекте: что нужно понимать
TypeScript — это надстройка над JavaScript, которая добавляет статическую типизацию.
Простыми словами:
В React TypeScript особенно полезен для:
onChange у input)Рекомендуемые настройки strict
В TypeScript есть режим строгой проверки — strict. Он включает важные проверки, например:
any (когда тип «неизвестно какой»)null/undefinedВ реальных проектах строгий режим экономит много времени.
Проверьте в tsconfig.json, что строгая проверка включена (в Vite‑шаблоне обычно уже включено):
Если страшно включать strict в старом проекте — это нормально. Но в новом учебном проекте лучше начинать правильно.
Алиасы импортов (удобно и чище)
Когда проект растёт, импорты вида ../../../../shared/ui/Button становятся проблемой.
Сделаем алиас, например @ → src.
Шаг 1. В tsconfig.json:
Шаг 2. Чтобы Vite тоже понимал этот алиас, поставим плагин:
Шаг 3. Подключим его в vite.config.ts:
Теперь можно писать:
Линтинг: ESLint и Prettier (и почему это два разных инструмента)
Линтинг — это автоматическая проверка кода на ошибки и несогласованный стиль.
Здесь почти всегда используется связка:
Важно: ESLint и Prettier решают разные задачи.
Подключаем ESLint для React + TypeScript
В Vite‑шаблоне ESLint может быть не настроен. Настроим.
Устанавливаем зависимости:
Создаём конфиг ESLint (формат flat config) eslint.config.js:
Что здесь важно:
typescript-eslint позволяет ESLint понимать TypeScripteslint-plugin-react-hooks проверяет правила хуков (мы разберём хуки позже, но линтер защитит вас сразу)eslint-plugin-react-refresh помогает избежать проблем с горячей перезагрузкой в dev‑режимеДобавим скрипт в package.json:
Запуск:
Подключаем Prettier
Устанавливаем:
Создаём .prettierrc:
Добавим скрипты:
Запуск форматирования:
Чтобы ESLint и Prettier не конфликтовали
Иногда ESLint пытается спорить с форматированием Prettier. Типовое решение — отключить форматирующие правила ESLint.
Устанавливаем:
И добавляем его в конфиг ESLint. Для flat config это делается импортом и подключением конфигурации:
Идея простая: Prettier отвечает за формат, ESLint — за правила кода.
Минимальная дисциплина в репозитории
Чтобы проект был удобен в работе:
.gitignore (Vite создаёт его автоматически)src/ и не смешивайте «всё в components»Итог
Вы создали базу, на которой удобно строить React‑приложение:
Дальше мы начнём писать компоненты и разбирать фундамент React: JSX, рендеринг, props/state и жизненный цикл через хуки.