Site React
Este gerador cria um novo site em React com CloudScape configurado, juntamente com a infraestrutura AWS CDK para implantar seu site 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 empacotador. Ela usa TanStack Router para roteamento type-safe.
Gerar um Site React
Seção intitulada “Gerar um Site React”Você pode gerar um novo Site React de duas formas:
- Instale o Nx Console VSCode Plugin se ainda não o fez
- Abra o console Nx no VSCode
- Clique em
Generate (UI)
na seção "Common Nx Commands" - Procure por
@aws/nx-plugin - ts#react-website
- Preencha os parâmetros obrigatórios
- Clique em
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
Você também pode realizar uma execução simulada para ver quais arquivos seriam alterados
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
Parâmetro | Tipo | Padrão | Descrição |
---|---|---|---|
name Obrigatório | 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. |
Saída do Gerador
Seção intitulada “Saída do Gerador”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 CloudScape e barra de navegação
Directoryhooks
- useAppLayout.tsx Hook para ajustar o AppLayout a partir de componentes aninhados
Directoryroutes
Directorywelcome
- index.tsx Rota (ou página) de exemplo para @tanstack/react-router
- styles.css Estilos globais
- vite.config.ts Configuração do Vite e Vitest
- tsconfig.json Configuração base do TypeScript para código e testes
- tsconfig.app.json Configuração TypeScript para código-fonte
- tsconfig.spec.json Configuração TypeScript para testes
O gerador também criará código de infraestrutura CDK para implantar seu site no diretório packages/common/constructs
:
Directorysrc
Directoryapp
Directorystatic-websites
- <name>.ts Infraestrutura específica do seu site
Directorycore
- static-website.ts Construct genérico StaticWebsite
Implementando Seu Site React
Seção intitulada “Implementando Seu Site React”A documentação do React é um bom ponto de partida para aprender o básico de desenvolvimento com React. Você pode consultar a documentação do CloudScape para detalhes sobre os componentes disponíveis e como usá-los.
Criando uma Rota/Página
Seção intitulada “Criando uma Rota/Página”Seu site CloudScape vem com TanStack Router configurado por padrão. Isso facilita a adição de novas rotas:
- Execute o Servidor de Desenvolvimento Local
- Crie um novo arquivo
<page-name>.tsx
emsrc/routes
, onde a posição na estrutura de arquivos representa o caminho - Observe que um
Route
eRouteComponent
são gerados automaticamente. Você pode começar a construir sua página aqui!
Navegação Entre Páginas
Seção intitulada “Navegação Entre Páginas”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 uma 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.
Configuração de Runtime
Seção intitulada “Configuração de Runtime”A configuração da sua infraestrutura AWS CDK é fornecida ao seu site via Runtime Configuration. Isso permite que seu site acesse detalhes como URLs de API que só são conhecidos após a implantação.
Infraestrutura
Seção intitulada “Infraestrutura”O construct CDK RuntimeConfig
pode ser usado para adicionar e recuperar configuração em sua infraestrutura CDK. Os constructs CDK gerados por @aws/nx-plugin
(como APIs tRPC e FastAPIs) adicionarão automaticamente valores ao RuntimeConfig
.
Seu construct CDK de site implantará a configuração de runtime como um arquivo runtime-config.json
na raiz do seu 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);
// Adiciona automaticamente valores ao RuntimeConfig new MyApi(this, 'MyApi', { integrations: MyApi.defaultIntegrations(this).build(), });
// Implanta automaticamente a config de runtime em runtime-config.json new MyWebsite(this, 'MyWebsite'); }}
Você deve garantir que declara seu website após quaisquer constructs que adicionem ao RuntimeConfig
, caso contrário eles estarão faltando no arquivo runtime-config.json
.
Código do Site
Seção intitulada “Código do Site”Em seu site, 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;};
Configuração de Runtime Local
Seção intitulada “Configuração de Runtime Local”Ao executar o servidor de desenvolvimento local, você precisará de um arquivo runtime-config.json
em seu diretório public
para que seu site local conheça URLs de backend, configuração de identidade, etc.
Seu projeto de site está configurado com um target load:runtime-config
que você pode usar para baixar o arquivo runtime-config.json
de uma aplicação implantada:
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"
Se você alterar o nome da sua stack no src/main.ts
do projeto de infraestrutura, precisará atualizar o target load:runtime-config
no arquivo project.json
do seu site com o nome da stack para carregar a configuração.
Servidor de Desenvolvimento Local
Seção intitulada “Servidor de Desenvolvimento Local”Você pode executar um servidor de desenvolvimento local usando os targets serve
ou serve-local
.
Target Serve
Seção intitulada “Target Serve”O target serve
inicia um servidor de desenvolvimento local para seu site. Este target requer que você tenha implantado qualquer infraestrutura de suporte com a qual o site interage, e ter carregado a configuração de runtime local.
Você pode executar este target com o comando:
pnpm nx run <my-website>:serve
yarn nx run <my-website>:serve
npx nx run <my-website>:serve
bunx nx run <my-website>:serve
Este target é útil para trabalhar em alterações do site apontando para APIs “reais” implantadas e outras infraestruturas.
Target Serve Local
Seção intitulada “Target Serve Local”O target serve-local
inicia um servidor de desenvolvimento local para seu site (com MODE do Vite definido como serve-local
), além de iniciar servidores locais para quaisquer APIs conectadas ao seu site via gerador de Conexão de API.
Quando seu servidor local é executado via este target, o runtime-config.json
é automaticamente sobrescrito para apontar para URLs de API locais.
Você pode executar este target com o comando:
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
Este target é útil quando você está trabalhando simultaneamente no site e na API e deseja iterar rapidamente sem implantar a infraestrutura.
Quando executado neste modo e nenhum runtime-config.json
estiver presente, se você configurou Autenticação Cognito (via gerador de Autenticação para Site CloudScape), o login será ignorado e requisições para servidores locais não incluirão headers de autenticação.
Para habilitar login e autenticação no serve-local
, implante sua infraestrutura e carregue a configuração de runtime.
Você pode fazer o build do seu site usando o target build
. Isso usa o Vite para criar um bundle de produção no diretório dist/packages/<my-website>/bundle
, além de type-checking, compilação e 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
Testar seu site é similar a escrever testes em um projeto TypeScript padrão. Consulte o guia de projeto 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
:
pnpm nx run <my-website>:test
yarn nx run <my-website>:test
npx nx run <my-website>:test
bunx nx run <my-website>:test
Implantando Seu Site
Seção intitulada “Implantando Seu Site”Para implantar seu site, recomendamos usar o Gerador de Infraestrutura TypeScript para criar uma aplicação CDK.
Você pode usar o construct CDK gerado em packages/common/constructs
para implantar seu site.
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'); }}