******** # Vite + React (frontend) — Guía básica para usar junto a Flask > **Objetivo**: tener un frontend en **React + Vite** que puedas desarrollar con HMR y luego **construir** para servirlo desde Flask. Aquí nos enfocamos solo en **Vite/React** (no en Python), pero incluimos cómo se **orquesta** con un backend Flask a alto nivel. --- ## 1) Requisitos * **Node.js** LTS (>= 18) — trae **npm** incluido. * Un editor (VS Code recomendado). * Terminal con `git` (opcional pero útil). > Comprueba versiones: `node -v` y `npm -v`. --- ## 2) Crear un proyecto con Vite **Con JavaScript**: ```bash npm create vite@latest myapp -- --template react cd myapp npm install npm run dev ``` **Con TypeScript** (recomendado para escalar): ```bash npm create vite@latest myapp -- --template react-ts cd myapp npm install npm run dev ``` * Vite arrancará en `http://localhost:5173/` (puerto por defecto). * Para cambiar el puerto: `npm run dev -- --port 3000` o config en `vite.config.ts`. --- ## 3) Estructura de carpetas (frontend) ``` myapp/ ├─ index.html # HTML raíz (Vite lo usa como entry) ├─ package.json # Scripts y dependencias ├─ vite.config.ts # Config de Vite (plugins, proxy, alias, etc.) ├─ public/ # Archivos copiados tal cual al build (opcional) └─ src/ ├─ main.tsx / main.jsx # Punto de entrada de React ├─ App.tsx / App.jsx # Componente raíz ├─ assets/ # Imágenes / fuentes estáticas importables ├─ components/ # Componentes reutilizables ├─ pages/ # Páginas si usas router └─ styles/ # CSS / CSS Modules / etc. ``` **Notas clave** * `index.html` está en la **raíz** (no en `public/`). Vite lo procesa y resuelve ` ``` ### `src/main.tsx` ```tsx import React from 'react' import ReactDOM from 'react-dom/client' import App from './App' import './styles/main.css' ReactDOM.createRoot(document.getElementById('root')!).render( ) ``` ### `src/App.tsx` ```tsx export default function App() { return

Hola, Vite + React

} ``` --- ## 10) Variables de entorno * Crea archivos `.env`, `.env.development`, `.env.production`. * **Prefijo obligatorio**: `VITE_` para que sean visibles en el cliente. `.env` ``` VITE_API_URL=/api ``` Uso en código: ```ts const base = import.meta.env.VITE_API_URL ``` --- ## 11) Aliases y rutas de importación Configura `@` → `src` para imports limpios. ```ts import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import path from 'node:path' export default defineConfig({ plugins: [react()], resolve: { alias: { '@': path.resolve(__dirname, 'src') } } }) ``` Uso: ```ts import Button from '@/components/Button' ``` --- ## 12) CSS, CSS Modules y assets * **CSS global**: importa `src/styles/main.css` en `main.tsx`. * **CSS Modules**: `Button.module.css` → `import styles from './Button.module.css'`. * **Imágenes** desde `src/assets`: ```tsx import logo from '@/assets/logo.svg' logo ``` * **Carpeta `public/`**: todo se copia sin procesar → accedes con `/archivo.ext`. --- ## 13) TypeScript (opcional) * Usa plantilla `react-ts` para TS listo. * Beneficios: autocompletado, tipado de props/estado, refactors más seguros. --- ## 14) Plugins útiles de Vite (opcionales) * `@vitejs/plugin-react` (incluye Fast Refresh, JSX). * `vite-tsconfig-paths` (respetar paths del `tsconfig` si usas TS). * `@rollup/plugin-visualizer` (inspeccionar el bundle del build). Instalar ej.: ```bash npm install -D vite-tsconfig-paths @rollup/plugin-visualizer ``` --- ## 15) Checklist de primeros pasos 1. Crear proyecto con `npm create vite@latest` (elige `react` o `react-ts`). 2. `npm install` y `npm run dev`. 3. Añadir **proxy** a Flask (`/api`) en `vite.config.ts`. 4. Crear componentes en `src/components` y páginas en `src/pages`. 5. Variables en `.env` con prefijo `VITE_`. 6. `npm run build` y servir el contenido de `dist/` desde Flask. --- ## 16) Troubleshooting rápido * **Puerto 5173 ocupado**: `npm run dev -- --port 3000` o `server.port` en `vite.config.ts`. * **CORS en dev**: usa `server.proxy` y llama a `/api` desde el frontend. * **Conflictos de React (peer deps)**: si una librería soporta solo React 16–18, instala React 18: ```bash npm install react@18 react-dom@18 ``` * **HMR no funciona**: asegúrate del `