Pular para o conteúdo

Site React

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

Este gerador cria um novo website React com shadcn/ui configurado por padrão, juntamente com a infraestrutura AWS CDK ou Terraform para implantar seu website na nuvem como um site estático hospedado no S3, servido pelo CloudFront e protegido pelo WAF.

A aplicação gerada utiliza Vite como ferramenta de build e bundler. Usa TanStack Router para roteamento type-safe.

Você pode gerar um novo Website React de duas formas:

  1. Instale o Nx Console VSCode Plugin se ainda não o fez
  2. Abra o console Nx no VSCode
  3. Clique em Generate (UI) na seção "Common Nx Commands"
  4. Procure por @aws/nx-plugin - ts#website
  5. Preencha os parâmetros obrigatórios
    • Clique em Generate
    ParâmetroTipoPadrãoDescrição
    name Obrigatóriostring-O nome da aplicação.
    framework reactreactO framework frontend a ser usado.
    directory stringpackagesO diretório da nova aplicação.
    subDirectory string-O subdiretório onde o projeto é colocado. Por padrão, este é o nome do projeto.
    ux none | cloudscape | shadcnshadcnO provedor de UX preferido.
    tailwind booleantrueAtivar TailwindCSS para estilização utility-first.
    tanstackRouter booleantrueAtivar roteador Tanstack para roteamento type-safe.
    infra cloudfront-s3 | nonecloudfront-s3O tipo de infraestrutura para implantar seu website.
    iac inherit | cdk | terraforminheritO provedor de IaC preferido. Por padrão, este é herdado da sua seleção inicial.
    preferInstallDependencies booleantrueSe deve preferir instalar dependências após a execução do gerador. Defina como false para adiar a instalação ao executar múltiplos geradores em lote (uma instalação ainda é executada se necessário para que geradores subsequentes possam calcular o grafo de projetos Nx); instale uma vez no final.

    O gerador criará a seguinte estrutura de projeto no diretório <directory>/<name>:

    • index.html Ponto de entrada HTML
    • public Assets estáticos
    • Directorysrc
      • main.tsx Ponto de entrada da aplicação com configuração React
      • config.ts Configuração da aplicação (ex: logo)
      • Directorycomponents
        • AppLayout Componentes para o layout geral e barra de navegação
      • Directoryhooks
        • useAppLayout.tsx Hook para ajustar o AppLayout de componentes aninhados (somente Cloudscape)
      • Directoryroutes
        • index.tsx Rota de exemplo (ou página) para TanStack Router
      • styles.css Estilos globais
    • vite.config.mts Configuração do Vite e Vitest
    • tsconfig.json Configuração TypeScript base para código e testes
    • tsconfig.app.json Configuração TypeScript para código fonte
    • tsconfig.spec.json Configuração TypeScript para testes

    Como este gerador fornece infraestrutura como código com base no iacProvider escolhido, ele criará um projeto em packages/common que inclui os constructs CDK ou módulos Terraform relevantes.

    O projeto comum de infraestrutura como código está estruturado da seguinte forma:

    • Directorypackages/common/constructs
      • Directorysrc
        • Directoryapp/ Constructs para infraestrutura específica de um projeto/gerador
        • Directorycore/ Constructs genéricos reutilizados pelos constructs em app
        • index.ts Ponto de entrada exportando os constructs de app
      • project.json Metas de build e configuração do projeto

    O gerador cria infraestrutura como código para implantar seu website baseado no iacProvider selecionado:

    • Directorypackages/common/constructs/src
      • Directoryapp
        • Directorystatic-websites
          • <name>.ts Infraestrutura específica para seu website
      • Directorycore
        • static-website.ts Construct genérico StaticWebsite

    O website implantado possui a seguinte arquitetura:

    Web BrowserWAFCloudFrontStatic Assets(S3)

    A distribuição CloudFront aplica uma política de cabeçalhos de resposta que define Strict-Transport-Security, X-Content-Type-Options, X-Frame-Options: DENY, Referrer-Policy e um Content-Security-Policy em todas as respostas.

    Um Content-Security-Policy padrão é aplicado. Ele restringe scripts e framing para mitigar XSS e clickjacking, enquanto permite conexões HTTPS e WSS para que o website possa chamar endpoints de serviços AWS (como API Gateway, Cognito e Bedrock AgentCore) cujas URLs são conhecidas apenas no momento da implantação. Para ajustar a política (por exemplo, para restringir connect-src às suas origens específicas), edite o valor content_security_policy no seu static-website.ts (CDK) ou static-website.tf (Terraform) gerado.

    runtime-config.json é servido com Cache-Control: no-cache para que os navegadores sempre busquem a configuração mais recente após uma reimplantação, em vez de usar uma cópia em cache desatualizada.

    A documentação do React é um bom ponto de partida para aprender os fundamentos de desenvolvimento com React.

    ux = cloudscape

    Você pode consultar a documentação do Cloudscape para detalhes sobre os componentes disponíveis e como usá-los.

    ux = shadcn

    Você pode consultar a documentação do shadcn/ui para detalhes sobre os componentes disponíveis e como usá-los.

    Seu website vem com TanStack Router configurado por padrão. Isso facilita a adição de novas rotas:

    1. Execute o Servidor de Desenvolvimento Local
    2. Crie um novo arquivo <page-name>.tsx em src/routes, com sua posição na estrutura de arquivos representando o caminho
    3. Observe que um Route e RouteComponent são gerados automaticamente. Comece a construir sua página aqui!

    Você pode usar o componente Link ou o 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 ...
    // Use `navigate` para redirecionar após ação assíncrona
    navigate({ to: '/products/$id', { params: { id }} });
    };
    return (
    <>
    <Link to="/products">Cancelar</Link>
    <Button onClick={submit}>Enviar</Button>
    </>
    )
    };

    Para mais detalhes, consulte a documentação do TanStack Router.

    A configuração de sua infraestrutura é fornecida ao seu website via Configuração de Runtime. Isso permite que seu website acesse detalhes como URLs de API que só são conhecidos após a implantação.

    O construct CDK RuntimeConfig pode ser usado para adicionar e recuperar configuração em sua infraestrutura CDK. Os constructs CDK gerados pelos geradores @aws/nx-plugin (como ts#trpc-api e py#fast-api) adicionarão automaticamente valores apropriados ao RuntimeConfig.

    Seu construct CDK do website implantará o namespace connection da configuração de runtime como um arquivo runtime-config.json na raiz do seu 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);
    // Website pode ser declarado em qualquer ponto — config de runtime é resolvida preguiçosamente
    new MyWebsite(this, 'MyWebsite');
    // Adiciona automaticamente valores ao RuntimeConfig
    new MyApi(this, 'MyApi', {
    integrations: MyApi.defaultIntegrations(this).build(),
    });
    }
    }

    Em seu website, você pode usar o hook useRuntimeConfig para recuperar valores da configuração de runtime:

    import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
    const MyComponent = () => {
    const runtimeConfig = useRuntimeConfig();
    // Acesse valores da config de runtime aqui
    const apiUrl = runtimeConfig.apis.MyApi;
    };

    Ao executar o servidor de desenvolvimento local, você precisará de um arquivo runtime-config.json em seu diretório public para que seu website local conheça as URLs de backend, configuração de identidade, etc.

    Seu projeto de website está configurado com um target load:runtime-config que você pode usar para baixar o arquivo runtime-config.json de uma aplicação implantada:

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

    O comando canônico para desenvolvimento local é dev, que inicia seu website (e quaisquer servidores locais para APIs que você conectou a ele) com um único comando:

    Terminal window
    pnpm nx dev <my-website>

    O target serve também está disponível para quando você precisa controlar quanto de sua aplicação é executado localmente versus apontando para infraestrutura AWS implantada. Para uma visão geral mais ampla do desenvolvimento local em projetos conectados, incluindo como dev se comporta para projetos com múltiplos componentes, consulte o guia Desenvolvimento Local.

    O target serve inicia um servidor de desenvolvimento local para seu website. Este target requer que você tenha implantado qualquer infraestrutura de suporte com a qual o website interage, e tenha carregado a configuração de runtime local.

    Você pode executar este target com o seguinte comando:

    Terminal window
    pnpm nx serve <my-website>

    Este target é útil para trabalhar em alterações do website apontando para APIs “reais” implantadas e outras infraestruturas.

    O target dev inicia um servidor de desenvolvimento local para seu website (com Vite MODE definido como local-dev), além de iniciar quaisquer servidores locais para APIs que você conectou ao seu website via gerador Connection.

    Quando seu servidor local é executado via este target, runtime-config.json é automaticamente sobrescrito para apontar para URLs de API locais.

    Você pode executar este target com o seguinte comando:

    Terminal window
    pnpm nx dev <my-website>

    Este target é útil quando você está trabalhando simultaneamente no website e na API e deseja iterar rapidamente sem implantar infraestrutura.

    Autenticação simulada

    Quando executado neste modo e nenhum runtime-config.json estiver presente, se você configurou Autenticação Cognito (via gerador ts#website#auth), o login será ignorado e requisições para servidores locais não incluirão headers de autenticação.

    Para habilitar login e autenticação para dev, implante sua infraestrutura e carregue a config de runtime.

    Você pode construir seu website usando o target build. Isso executa os targets bundle, compile, test e lint, realizando type-checking, bundling, testes e linting do seu website.

    Terminal window
    pnpm nx build <my-website>

    O target bundle usa o Vite para criar um bundle de produção no diretório raiz dist/packages/<my-website>/bundle. Este é o artefato implantável consumido pela infraestrutura do seu website. Você pode executá-lo separadamente:

    Terminal window
    pnpm nx bundle <my-website>

    Testar seu website é similar a escrever testes em um projeto TypeScript padrão. Consulte o guia de projetos TypeScript para detalhes.

    Para testes específicos de React, o React Testing Library já está instalado e disponível. Para detalhes de uso, consulte a documentação do React Testing Library.

    Você pode executar seus testes usando o target test:

    Terminal window
    pnpm nx test <my-website>

    O gerador de website React cria infraestrutura como código CDK ou Terraform baseado no iacProvider selecionado. Você pode usar isso para implantar seu website.

    Para implantar seu website, recomendamos usar o gerador ts#infra para criar uma aplicação CDK.

    Você pode usar o construct CDK gerado em packages/common/constructs para implantar seu website.

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

    Isso configura:

    1. Um bucket S3 para hospedar arquivos estáticos do website
    2. Distribuição CloudFront para entrega global de conteúdo
    3. Web ACL WAF para proteção de segurança
    4. Origin Access Control para acesso seguro ao S3
    5. Implantação automática de arquivos do website e configuração de runtime

    Use o gerador connection para integrar este projeto com outros em seu workspace. As seguintes conexões envolvem este projeto:

    tRPC
    React para tRPCChame uma API tRPC de um site React
    FastAPI
    React para FastAPIChame uma API FastAPI Python de um site React
    Smithy
    React para API SmithyChame uma API Smithy de um site React
    Strands AgentsPython
    React para Python AgentChame um Python Agent de um site React
    Strands AgentsTypeScript
    React para TypeScript AgentChame um TypeScript Agent de um site React
    CopilotKit
    React para AG-UI AgentChame um Agent que expõe o protocolo AG-UI de um site React via CopilotKit