Вообще, во фронтенде обычно другой техпроцесс. Разработчик не пишет код и разметку, которые будут работать непосредственно в браузере. Создаётся проект на жаваскрипте или тайпскрипте, который может иметь зависимости. Это красивый код по всем правилам науки. Для деплоя код «переваривается»: код проекта и зависимостей преобразуется в жаваскрипт, возможно, более старой версии, минифицируется и заталкивается в один или несколько файлов js, которые закидываются на сервер.
Типичное приложение на реакте с точки зрения пользователя — файл—рыба html, который грузит скрипты, которые уже создают DOM. По крайней мере, так было до недавних пор.
С точки зрения разработчика — проект, для которого нужно иметь nodejs и пакетный менеджер (nmp). Этот проект можно сбилдить и задеплоить. При разработке запускают девелопмент‐сервер, который отслеживает изменения файлов и самостоятельно подгружает новый код в локально работающее приложение.
Я работал с приложениями на реакте, которые создавались с помощью create-react-app: эта утилитка генерирует скелет, который можно набивать по своему усмотрению. Но она приказала долго жить. А что вместо неё использовать? Альтернативы есть, но чего‐то такого же простого, наверно, нет. (Может быть, Vite.js достаточно простой, но я с ним не работал.) Думаю, надёжный вариант — Next.js. Это не просто реакт, а фреймворк, основанный на реакте. То есть штука несколько замысловатая. Зато предоставляет искоробочные решения типовых задач — например, маршрутизацию.
Особенность Next.js — он старается сгенерировать как можно больше html. В принципе, для разработчика это, наверно, не очень принципиально, но в динамичные компоненты приходится добавлять 'use client;'.
Короче, я бы посоветовал попробовать Next.js. И пишите, как и что, тоже будет любопытно поковыряться. Чтобы его юзать, нужны node.js и npm. Проект создаётся просто: выполнить команду и ответить на вопросы
https://nextjs.org/docs/getting-started/installation. Команда npm run dev запускает девелопмент‐сервер.
(Если что, можно ноду устанавливать не на компе, а в докере, и разрабатывать в контейнере. Не люблю, когда нода и npm забивают комп всякой фигнёй.)