Sitio web de React
Este generador crea un nuevo sitio web en React configurado con CloudScape, junto con la infraestructura de AWS CDK o Terraform para desplegar tu sitio web en la nube como un sitio estático alojado en S3, servido por CloudFront y protegido por WAF.
La aplicación generada utiliza Vite como herramienta de construcción y empaquetado. Emplea TanStack Router para enrutamiento tipado.
Generar un sitio web React
Sección titulada «Generar un sitio web React»Puedes generar un nuevo sitio web React de dos formas:
- Instale el Nx Console VSCode Plugin si aún no lo ha hecho
- Abra la consola Nx en VSCode
- Haga clic en
Generate (UI)
en la sección "Common Nx Commands" - Busque
@aws/nx-plugin - ts#react-website
- Complete los parámetros requeridos
- Haga clic en
Generate
pnpm nx g @aws/nx-plugin:ts#react-website
yarn nx g @aws/nx-plugin:ts#react-website
npx nx g @aws/nx-plugin:ts#react-website
bunx nx g @aws/nx-plugin:ts#react-website
También puede realizar una ejecución en seco para ver qué archivos se cambiarían
pnpm nx g @aws/nx-plugin:ts#react-website --dry-run
yarn nx g @aws/nx-plugin:ts#react-website --dry-run
npx nx g @aws/nx-plugin:ts#react-website --dry-run
bunx nx g @aws/nx-plugin:ts#react-website --dry-run
Opciones
Sección titulada «Opciones»Parámetro | Tipo | Predeterminado | Descripción |
---|---|---|---|
name Requerido | string | - | The name of the application. |
directory | string | packages | The directory of the new application. |
enableTailwind | boolean | true | Enable TailwindCSS for utility-first styling. |
enableTanstackRouter | boolean | true | Enable Tanstack router for type-safe routing. |
iacProvider | string | Inherit | The preferred IaC provider. By default this is inherited from your initial selection. |
Salida del generador
Sección titulada «Salida del generador»El generador creará la siguiente estructura de proyecto en el directorio <directory>/<name>
:
- index.html Punto de entrada HTML
- public Assets estáticos
Directorysrc
- main.tsx Punto de entrada de la aplicación con configuración de React
- config.ts Configuración de la aplicación (ej. logo)
Directorycomponents
- AppLayout Componentes para el layout general de CloudScape y barra de navegación
Directoryhooks
- useAppLayout.tsx Hook para ajustar el AppLayout desde componentes anidados
Directoryroutes
Directorywelcome
- index.tsx Ruta (o página) de ejemplo para @tanstack/react-router
- styles.css Estilos globales
- vite.config.ts Configuración de Vite y Vitest
- tsconfig.json Configuración base de TypeScript para código y tests
- tsconfig.app.json Configuración de TypeScript para código fuente
- tsconfig.spec.json Configuración de TypeScript para tests
Infraestructura
Sección titulada «Infraestructura»Dado que este generador proporciona infraestructura como código basada en tu proveedor de iacProvider
seleccionado, creará un proyecto en packages/common
que incluye los constructos CDK o módulos de Terraform correspondientes.
El proyecto común de infraestructura como código tiene la siguiente estructura:
Directorypackages/common/constructs
Directorysrc
Directoryapp/ Constructos para infraestructura específica de un proyecto/generador
- …
Directorycore/ Constructos genéricos reutilizados por los constructos en
app
- …
- index.ts Punto de entrada que exporta los constructos de
app
- project.json Objetivos de compilación y configuración del proyecto
Directorypackages/common/terraform
Directorysrc
Directoryapp/ Módulos de Terraform para infraestructura específica de un proyecto/generador
- …
Directorycore/ Módulos genéricos reutilizados por los módulos en
app
- …
- project.json Objetivos de compilación y configuración del proyecto
El generador crea infraestructura como código para desplegar tu sitio web según el iacProvider
seleccionado:
Directorypackages/common/constructs/src
Directoryapp
Directorystatic-websites
- <name>.ts Infraestructura específica de tu sitio web
Directorycore
- static-website.ts Construct genérico StaticWebsite
Directorypackages/common/terraform/src
Directoryapp
Directorystatic-websites
Directory<name>
- <name>.tf Módulo específico para tu sitio web
Directorycore
Directorystatic-website
- static-website.tf Módulo genérico de sitio web estático
Implementando tu sitio web React
Sección titulada «Implementando tu sitio web React»La documentación de React es un buen punto de partida para aprender los fundamentos. Puedes consultar la documentación de CloudScape para detalles sobre los componentes disponibles y su uso.
Crear una ruta/página
Sección titulada «Crear una ruta/página»Tu sitio CloudScape incluye TanStack Router configurado por defecto. Esto facilita añadir nuevas rutas:
- Ejecutar el servidor de desarrollo local
- Crear un nuevo archivo
<nombre-pagina>.tsx
ensrc/routes
, donde la posición en el árbol de archivos representa la ruta - Observa que se generan automáticamente un
Route
yRouteComponent
. ¡Puedes empezar a construir tu página aquí!
Navegar entre páginas
Sección titulada «Navegar entre páginas»Puedes usar el componente Link
o el hook useNavigate
para navegar entre páginas:
import { Link, useNavigate } from '@tanstack/react-router';
export const MyComponent = () => { const navigate = useNavigate();
const submit = async () => { const id = await ... // Usar `navigate` para redireccionar después de una acción asíncrona navigate({ to: '/products/$id', { params: { id }} }); };
return ( <> <Link to="/products">Cancelar</Link> <Button onClick={submit}>Enviar</Button> </> )};
Para más detalles, consulta la documentación de TanStack Router.
Configuración en tiempo de ejecución
Sección titulada «Configuración en tiempo de ejecución»La configuración de tu infraestructura se provee al sitio web mediante Configuración en Tiempo de Ejecución. Esto permite acceder a detalles como URLs de API que no se conocen hasta el despliegue.
Infraestructura
Sección titulada «Infraestructura»El construct RuntimeConfig
de CDK puede usarse para añadir y recuperar configuración. Los constructs generados por generadores @aws/nx-plugin
(como ts#trpc-api
y py#fast-api
) añaden automáticamente valores al RuntimeConfig
.
Tu construct CDK del sitio web desplegará la configuración como archivo runtime-config.json
en la raíz de tu bucket S3.
import { Stack } from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyWebsite } from ':my-scope/common-constructs';
export class ApplicationStack extends Stack { constructor(scope: Construct, id: string) { super(scope, id);
// Añade automáticamente valores al RuntimeConfig new MyApi(this, 'MyApi', { integrations: MyApi.defaultIntegrations(this).build(), });
// Despliega automáticamente la configuración en runtime-config.json new MyWebsite(this, 'MyWebsite'); }}
Con Terraform, la configuración se gestiona mediante módulos runtime-config. Los módulos generados por @aws/nx-plugin
(como ts#trpc-api
y py#fast-api
) añaden automáticamente valores a la configuración.
Tu módulo Terraform del sitio web desplegará la configuración como archivo runtime-config.json
en la raíz de tu bucket S3.
# Añade valores a la configuración automáticamentemodule "my_api" { source = "../../common/terraform/src/app/apis/my-api"}
# Despliega la configuración en runtime-config.jsonmodule "my_website" { source = "../../common/terraform/src/app/static-websites/my-website"
providers = { aws.us_east_1 = aws.us_east_1 }
# Garantiza que la API se despliega primero depends_on = [module.my_api]}
Código del sitio web
Sección titulada «Código del sitio web»En tu sitio web, usa el hook useRuntimeConfig
para obtener valores de la configuración:
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
const MyComponent = () => { const runtimeConfig = useRuntimeConfig();
// Accede a los valores de la configuración aquí const apiUrl = runtimeConfig.apis.MyApi;};
Configuración local
Sección titulada «Configuración local»Al ejecutar el servidor de desarrollo local, necesitarás un archivo runtime-config.json
en tu directorio public
para que el sitio local conozca las URLs del backend, configuración de identidad, etc.
Tu proyecto incluye un target load:runtime-config
para descargar el archivo desde una aplicación desplegada:
pnpm nx run <my-website>:"load:runtime-config"
yarn nx run <my-website>:"load:runtime-config"
npx nx run <my-website>:"load:runtime-config"
bunx nx run <my-website>:"load:runtime-config"
Servidor de desarrollo local
Sección titulada «Servidor de desarrollo local»Puedes ejecutar un servidor local usando los targets serve
o serve-local
.
Target Serve
Sección titulada «Target Serve»El target serve
inicia un servidor de desarrollo local. Requiere tener desplegada cualquier infraestructura relacionada y haber cargado la configuración local.
Ejecútalo con:
pnpm nx run <my-website>:serve
yarn nx run <my-website>:serve
npx nx run <my-website>:serve
bunx nx run <my-website>:serve
Útil para trabajar en cambios del sitio apuntando a APIs reales desplegadas.
Target Serve Local
Sección titulada «Target Serve Local»El target serve-local
inicia un servidor local (con Vite MODE
en serve-local
) e inicia servidores locales para APIs conectadas mediante el generador API Connection.
En este modo, runtime-config.json
se sobrescribe automáticamente para apuntar a URLs locales de APIs.
Ejecútalo con:
pnpm nx run <my-website>:serve-local
yarn nx run <my-website>:serve-local
npx nx run <my-website>:serve-local
bunx nx run <my-website>:serve-local
Útil para desarrollo conjunto del sitio y API sin desplegar infraestructura.
En este modo, si no hay runtime-config.json
y usas Autenticación Cognito (via CloudScape Website Auth), el login se omitirá y las peticiones no incluirán headers de autenticación.
Para habilitar login en serve-local
, despliega tu infraestructura y carga la configuración.
Construcción
Sección titulada «Construcción»Construye tu sitio web con el target build
. Esto crea un bundle de producción en dist/packages/<my-website>/bundle
usando Vite, junto con verificación de tipos y linting.
pnpm nx run <my-website>:build
yarn nx run <my-website>:build
npx nx run <my-website>:build
bunx nx run <my-website>:build
Pruebas
Sección titulada «Pruebas»Las pruebas siguen estándares de proyectos TypeScript. Consulta la guía de proyectos TypeScript.
Para pruebas específicas de React, React Testing Library está preinstalado. Consulta su documentación.
Ejecuta pruebas con:
pnpm nx run <my-website>:test
yarn nx run <my-website>:test
npx nx run <my-website>:test
bunx nx run <my-website>:test
Despliegue del sitio web
Sección titulada «Despliegue del sitio web»El generador crea infraestructura CDK o Terraform según tu iacProvider
. Úsala para desplegar tu sitio.
Recomendamos usar el generador ts#infra
para crear una aplicación CDK.
Usa el construct generado en packages/common/constructs
para desplegar:
import { Stack } from 'aws-cdk-lib';import { Construct } from 'constructs';import { MyWebsite } from ':my-scope/common-constructs';
export class ApplicationStack extends Stack { constructor(scope: Construct, id: string) { super(scope, id);
new MyWebsite(this, 'MyWebsite'); }}
Esto configura:
- Bucket S3 para alojar archivos estáticos
- Distribución CloudFront para entrega global
- Web ACL WAF para protección
- Origin Access Control para acceso seguro
- Despliegue automático de archivos y configuración
Recomendamos usar el generador terraform#project
para crear un proyecto Terraform.
Usa el módulo generado en packages/common/terraform
para desplegar:
# Desplegar sitio webmodule "my_website" { source = "../../common/terraform/src/app/static-websites/my-website"
providers = { aws.us_east_1 = aws.us_east_1 }}
Esto configura:
- Bucket S3 para archivos estáticos
- Distribución CloudFront
- Web ACL WAF (en us-east-1)
- Origin Access Control
- Despliegue automático de archivos y configuración