Ir al contenido

Sitio web de React

Filter this guidePick generator option values to hide sections that don't apply.

Este generador crea un nuevo sitio web en React configurado con shadcn/ui por defecto, 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.

Puedes generar un nuevo sitio web React de dos formas:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#website
  5. Complete los parámetros requeridos
    • Haga clic en Generate
    ParámetroTipoPredeterminadoDescripción
    name Requeridostring-El nombre de la aplicación.
    framework reactreactEl framework frontend a utilizar.
    directory stringpackagesEl directorio de la nueva aplicación.
    subDirectory string-El subdirectorio en el que se coloca el proyecto. Por defecto, este es el nombre del proyecto.
    ux none | cloudscape | shadcnshadcnEl proveedor de UX preferido.
    tailwind booleantrueHabilitar TailwindCSS para estilos basados en utilidades.
    tanstackRouter booleantrueHabilitar Tanstack router para enrutamiento con seguridad de tipos.
    infra cloudfront-s3 | nonecloudfront-s3El tipo de infraestructura con la que desplegar tu sitio web.
    iac inherit | cdk | terraforminheritEl proveedor de IaC preferido. Por defecto, se hereda de tu selección inicial.
    preferInstallDependencies booleantrueSi se prefiere instalar las dependencias después de que se ejecute el generador. Establece en false para diferir la instalación cuando se ejecutan múltiples generadores en lote (la instalación aún se ejecuta si es necesario para que los generadores subsecuentes puedan calcular el grafo de proyectos de Nx); instala una vez al final.

    El generador creará la siguiente estructura de proyecto en el directorio <directory>/<name>:

    • index.html Punto de entrada HTML
    • public Assets estáticos
    • Directoriosrc
      • main.tsx Punto de entrada de la aplicación con configuración de React
      • config.ts Configuración de la aplicación (ej. logo)
      • Directoriocomponents
        • AppLayout Componentes para el layout general y barra de navegación
      • Directoriohooks
        • useAppLayout.tsx Hook para ajustar el AppLayout desde componentes anidados (solo Cloudscape)
      • Directorioroutes
        • index.tsx Ruta (o página) de ejemplo para TanStack Router
      • styles.css Estilos globales
    • vite.config.mts 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

    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:

    • Directoriopackages/common/constructs
      • Directoriosrc
        • Directorioapp/ Constructos para infraestructura específica de un proyecto/generador
        • Directoriocore/ 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

    El generador crea infraestructura como código para desplegar tu sitio web según el iacProvider seleccionado:

    • Directoriopackages/common/constructs/src
      • Directorioapp
        • Directoriostatic-websites
          • <name>.ts Infraestructura específica de tu sitio web
      • Directoriocore
        • static-website.ts Construct genérico StaticWebsite

    El sitio web desplegado tiene la siguiente arquitectura:

    Web BrowserWAFCloudFrontStatic Assets(S3)

    La distribución de CloudFront aplica una política de encabezados de respuesta que establece Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options: DENY, Referrer-Policy y una Content-Security-Policy en todas las respuestas.

    Se aplica una Content-Security-Policy predeterminada. Restringe scripts y framing para mitigar XSS y clickjacking, mientras permite conexiones HTTPS y WSS para que el sitio web pueda llamar a endpoints de servicios AWS (como API Gateway, Cognito y Bedrock AgentCore) cuyas URLs solo se conocen en tiempo de despliegue. Para ajustar la política (por ejemplo, restringir connect-src a tus orígenes específicos), edita el valor content_security_policy en tu static-website.ts generado (CDK) o static-website.tf (Terraform).

    runtime-config.json se sirve con Cache-Control: no-cache para que los navegadores siempre obtengan la configuración más reciente después de un redespliegue, en lugar de usar una copia en caché obsoleta.

    La documentación de React es un buen punto de partida para aprender los fundamentos.

    ux = cloudscape

    Puedes consultar la documentación de Cloudscape para detalles sobre los componentes disponibles y su uso.

    ux = shadcn

    Puedes consultar la documentación de shadcn/ui para detalles sobre los componentes disponibles y su uso.

    Tu sitio web incluye TanStack Router configurado por defecto. Esto facilita añadir nuevas rutas:

    1. Ejecutar el servidor de desarrollo local
    2. Crear un nuevo archivo <nombre-pagina>.tsx en src/routes, donde la posición en el árbol de archivos representa la ruta
    3. Observa que se generan automáticamente un Route y RouteComponent. ¡Puedes empezar a construir tu página aquí!

    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.

    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.

    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á el namespace connection de la configuración en tiempo de ejecución como archivo runtime-config.json en la raíz de tu bucket S3.

    packages/infra/src/stacks/application-stack.ts
    import { Stack } from 'aws-cdk-lib';
    import { Construct } from 'constructs';
    import { MyWebsite, MyApi } from ':my-scope/common-constructs';
    export class ApplicationStack extends Stack {
    constructor(scope: Construct, id: string) {
    super(scope, id);
    // El sitio web puede declararse en cualquier punto — la configuración se resuelve de forma diferida
    new MyWebsite(this, 'MyWebsite');
    // Añade automáticamente valores al RuntimeConfig
    new MyApi(this, 'MyApi', {
    integrations: MyApi.defaultIntegrations(this).build(),
    });
    }
    }

    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;
    };

    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:

    Terminal window
    pnpm nx run <my-website>:"load:runtime-config"

    El comando canónico para el desarrollo local es dev, que inicia tu sitio web (y cualquier servidor local para APIs que hayas conectado) con un solo comando:

    Terminal window
    pnpm nx dev <my-website>

    El target serve también está disponible para cuando necesites controlar cuánto de tu aplicación se ejecuta localmente versus apuntando a infraestructura AWS desplegada. Para una visión general más amplia del desarrollo local a través de proyectos conectados, incluyendo cómo se comporta dev para proyectos con múltiples componentes, consulta la guía de Desarrollo Local.

    El target serve inicia un servidor de desarrollo local para tu sitio web. Este target requiere que hayas desplegado cualquier infraestructura de soporte con la que interactúa el sitio web, y que hayas cargado la configuración de runtime local.

    Puedes ejecutar este target con el siguiente comando:

    Terminal window
    pnpm nx serve <my-website>

    Este target es útil para trabajar en cambios del sitio web mientras apuntas a APIs “reales” desplegadas y otra infraestructura.

    El target dev inicia un servidor de desarrollo local para tu sitio web (con Vite MODE establecido en local-dev), así como iniciando cualquier servidor local para APIs que hayas conectado a tu sitio web mediante el generador Connection.

    Cuando tu servidor de sitio web local se ejecuta mediante este target, runtime-config.json se sobrescribe automáticamente para apuntar a las URLs de tu API que se ejecutan localmente.

    Puedes ejecutar este target con el siguiente comando:

    Terminal window
    pnpm nx dev <my-website>

    Este target es útil cuando estás trabajando en tu sitio web y API y deseas iterar rápidamente sin desplegar tu infraestructura.

    Autenticación simulada

    Cuando se ejecuta en este modo y no hay runtime-config.json presente, si has configurado Autenticación Cognito (mediante el generador ts#website#auth), el inicio de sesión se omitirá y las solicitudes a tus servidores locales no incluirán encabezados de autenticación.

    Para habilitar el inicio de sesión y la autenticación para dev, despliega tu infraestructura y carga la configuración de runtime.

    Puedes construir tu sitio web usando el target build. Esto ejecuta los targets bundle, compile, test y lint, verificando tipos, empaquetando, probando y analizando tu sitio web.

    Terminal window
    pnpm nx build <my-website>

    El target bundle usa Vite para crear un paquete de producción en el directorio raíz dist/packages/<my-website>/bundle. Este es el artefacto desplegable consumido por la infraestructura de tu sitio web. Puedes ejecutarlo por sí solo:

    Terminal window
    pnpm nx bundle <my-website>

    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:

    Terminal window
    pnpm nx test <my-website>

    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:

    packages/infra/src/stacks/application-stack.ts
    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:

    1. Bucket S3 para alojar archivos estáticos
    2. Distribución CloudFront para entrega global
    3. Web ACL WAF para protección
    4. Origin Access Control para acceso seguro
    5. Despliegue automático de archivos y configuración

    Usa el generador connection para integrar este proyecto con otros en tu workspace. Las siguientes conexiones involucran este proyecto:

    tRPC
    React a tRPCLlama a una API tRPC desde un sitio web React
    FastAPI
    React a FastAPILlama a una API FastAPI en Python desde un sitio web React
    Smithy
    React a Smithy APILlama a una API Smithy desde un sitio web React
    Strands AgentsPython
    React a Python AgentLlama a un Python Agent desde un sitio web React
    Strands AgentsTypeScript
    React a TypeScript AgentLlama a un TypeScript Agent desde un sitio web React
    CopilotKit
    React a AG-UI AgentLlama a un Agent que expone el protocolo AG-UI desde un sitio web React a través de CopilotKit