Sito Web React
Questo generatore crea un nuovo sito web React con CloudScape configurato, insieme all’infrastruttura AWS CDK o Terraform per distribuire il tuo sito web sul cloud come sito statico ospitato in S3, servito da CloudFront e protetto da WAF.
L’applicazione generata utilizza Vite come strumento di build e bundler. Utilizza TanStack Router per il routing type-safe.
Utilizzo
Sezione intitolata “Utilizzo”Generare un Sito Web React
Sezione intitolata “Generare un Sito Web React”Puoi generare un nuovo Sito Web React in due modi:
- Installa il Nx Console VSCode Plugin se non l'hai già fatto
- Apri la console Nx in VSCode
- Clicca su
Generate (UI)
nella sezione "Common Nx Commands" - Cerca
@aws/nx-plugin - ts#react-website
- Compila i parametri richiesti
- Clicca su
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
Puoi anche eseguire una prova per vedere quali file verrebbero modificati
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
Opzioni
Sezione intitolata “Opzioni”Parametro | Tipo | Predefinito | Descrizione |
---|---|---|---|
name Obbligatorio | 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. |
Output del Generatore
Sezione intitolata “Output del Generatore”Il generatore creerà la seguente struttura del progetto nella directory <directory>/<nome>
:
- index.html Punto di ingresso HTML
- public Asset statici
Directorysrc
- main.tsx Punto di ingresso dell’applicazione con configurazione React
- config.ts Configurazione dell’applicazione (es. logo)
Directorycomponents
- AppLayout Componenti per il layout CloudScape e la barra di navigazione
Directoryhooks
- useAppLayout.tsx Hook per regolare l’AppLayout da componenti annidati
Directoryroutes
Directorywelcome
- index.tsx Route di esempio (o pagina) per @tanstack/react-router
- styles.css Stili globali
- vite.config.ts Configurazione Vite e Vitest
- tsconfig.json Configurazione TypeScript base per sorgenti e test
- tsconfig.app.json Configurazione TypeScript per il codice sorgente
- tsconfig.spec.json Configurazione TypeScript per i test
Infrastruttura
Sezione intitolata “Infrastruttura”Poiché questo generatore fornisce infrastruttura come codice basata sul tuo iacProvider
selezionato, creerà un progetto in packages/common
che include i relativi costrutti CDK o moduli Terraform.
Il progetto comune di infrastruttura come codice è strutturato come segue:
Directorypackages/common/constructs
Directorysrc
Directoryapp/ Construct per l’infrastruttura specifica di un progetto/generatore
- …
Directorycore/ Construct generici riutilizzati dai construct in
app
- …
- index.ts Punto di ingresso che esporta i construct da
app
- project.json Target di build e configurazione del progetto
Directorypackages/common/terraform
Directorysrc
Directoryapp/ Moduli Terraform per l’infrastruttura specifica di un progetto/generatore
- …
Directorycore/ Moduli generici riutilizzati dai moduli in
app
- …
- project.json Target di build e configurazione del progetto
Il generatore crea infrastruttura as code per distribuire il tuo sito web in base al iacProvider
selezionato:
Directorypackages/common/constructs/src
Directoryapp
Directorystatic-websites
- <nome>.ts Infrastruttura specifica per il tuo sito web
Directorycore
- static-website.ts Construct CDK generico per sito statico
Directorypackages/common/terraform/src
Directoryapp
Directorystatic-websites
Directory<nome>
- <nome>.tf Modulo specifico per il tuo sito web
Directorycore
Directorystatic-website
- static-website.tf Modulo Terraform generico per sito statico
Implementazione del Sito Web React
Sezione intitolata “Implementazione del Sito Web React”La documentazione React è un buon punto di partenza per apprendere le basi dello sviluppo con React. Puoi consultare la documentazione CloudScape per dettagli sui componenti disponibili e il loro utilizzo.
Creazione di una Route/Pagina
Sezione intitolata “Creazione di una Route/Pagina”Il tuo sito CloudScape include TanStack Router configurato di default. Questo semplifica l’aggiunta di nuove route:
- Avvia il Server di Sviluppo Locale
- Crea un nuovo file
<nome-pagina>.tsx
insrc/routes
, con la posizione nell’albero che rappresenta il percorso - Noterai che un
Route
eRouteComponent
vengono generati automaticamente. Puoi iniziare a costruire la tua pagina qui!
Navigazione tra Pagine
Sezione intitolata “Navigazione tra Pagine”Puoi usare il componente Link
o l’hook useNavigate
per navigare tra le pagine:
import { Link, useNavigate } from '@tanstack/react-router';
export const MyComponent = () => { const navigate = useNavigate();
const submit = async () => { const id = await ... // Usa `navigate` per reindirizzare dopo un'azione asincrona navigate({ to: '/products/$id', { params: { id }} }); };
return ( <> <Link to="/products">Annulla</Link> <Button onClick={submit}>Invia</Button> </> )};
Per maggiori dettagli, consulta la documentazione TanStack Router.
Configurazione Runtime
Sezione intitolata “Configurazione Runtime”La configurazione dalla tua infrastruttura viene fornita al sito web tramite Configurazione Runtime. Questo permette al sito di accedere a dettagli come URL di API non noti fino al deployment.
Infrastruttura
Sezione intitolata “Infrastruttura”Il construct RuntimeConfig
CDK può essere usato per aggiungere e recuperare configurazioni nella tua infrastruttura CDK. I construct CDK generati dai generatori @aws/nx-plugin
(come ts#trpc-api
e py#fast-api
) aggiungeranno automaticamente i valori appropriati a RuntimeConfig
.
Il construct CDK del tuo sito web distribuirà la configurazione runtime come file runtime-config.json
nella root del 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);
// Aggiunge automaticamente valori a RuntimeConfig new MyApi(this, 'MyApi', { integrations: MyApi.defaultIntegrations(this).build(), });
// Distribuisce automaticamente la config runtime in runtime-config.json new MyWebsite(this, 'MyWebsite'); }}
Con Terraform, la configurazione runtime è gestita tramite moduli runtime-config. I moduli Terraform generati da generatori @aws/nx-plugin
(come ts#trpc-api
e py#fast-api
) aggiungeranno automaticamente valori appropriati alla configurazione runtime.
Il modulo Terraform del tuo sito web distribuirà la configurazione runtime come file runtime-config.json
nella root del bucket S3.
# Aggiunge automaticamente valori alla config runtimemodule "my_api" { source = "../../common/terraform/src/app/apis/my-api"}
# Distribuisce automaticamente la config runtime in runtime-config.jsonmodule "my_website" { source = "../../common/terraform/src/app/static-websites/my-website"
providers = { aws.us_east_1 = aws.us_east_1 }
# Garantisce che l'API sia distribuita prima per aggiungere alla config runtime depends_on = [module.my_api]}
Codice del Sito Web
Sezione intitolata “Codice del Sito Web”Nel tuo sito web, puoi usare l’hook useRuntimeConfig
per recuperare valori dalla configurazione runtime:
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
const MyComponent = () => { const runtimeConfig = useRuntimeConfig();
// Accedi ai valori della config runtime qui const apiUrl = runtimeConfig.apis.MyApi;};
Configurazione Runtime Locale
Sezione intitolata “Configurazione Runtime Locale”Quando esegui il server di sviluppo locale, avrai bisogno di un file runtime-config.json
nella tua directory public
per far conoscere al sito locale gli URL dei backend, configurazione identity, ecc.
Il tuo progetto website è configurato con un target load:runtime-config
che puoi usare per scaricare il file runtime-config.json
da un’applicazione distribuita:
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"
Server di Sviluppo Locale
Sezione intitolata “Server di Sviluppo Locale”Puoi eseguire un server di sviluppo locale usando i target serve
o serve-local
.
Target Serve
Sezione intitolata “Target Serve”Il target serve
avvia un server di sviluppo locale per il tuo sito web. Questo target richiede che tu abbia distribuito qualsiasi infrastruttura di supporto con cui il sito interagisce, e aver caricato la configurazione runtime locale.
Puoi eseguire questo target 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
Questo target è utile per lavorare a modifiche del sito puntando ad API “reali” distribuite.
Target Serve Local
Sezione intitolata “Target Serve Local”Il target serve-local
avvia un server di sviluppo locale per il tuo sito web (con Vite MODE
impostato a serve-local
), avviando anche server locali per API connesse tramite il generatore API Connection.
Quando il server locale è eseguito con questo target, runtime-config.json
viene automaticamente sovrascritto per puntare agli URL API locali.
Puoi eseguire questo target 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
Questo target è utile quando lavori sia sul sito che sulle API e vuoi iterare rapidamente senza distribuire l’infrastruttura.
In questa modalità, se non è presente runtime-config.json
e hai configurato l’autenticazione Cognito (tramite il generatore CloudScape Website Auth), il login sarà saltato e le richieste ai server locali non includeranno header di autenticazione.
Per abilitare login e autenticazione in serve-local
, distribuisci l’infrastruttura e carica la config runtime.
Puoi compilare il sito web con il target build
. Questo usa Vite per creare un bundle di produzione nella directory dist/packages/<my-website>/bundle
, oltre a type-checking, compilazione 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
Testing
Sezione intitolata “Testing”Testare il sito web è simile a scrivere test in un progetto TypeScript standard. Consulta la guida TypeScript project per dettagli.
Per test specifici React, React Testing Library è già installato e disponibile. Per dettagli, consulta la documentazione React Testing Library.
Puoi eseguire i test 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
Distribuzione del Sito Web
Sezione intitolata “Distribuzione del Sito Web”Il generatore React website crea infrastruttura as code CDK o Terraform in base al iacProvider
selezionato. Puoi usarla per distribuire il sito.
Per distribuire, raccomandiamo di usare il generatore ts#infra
per creare un’applicazione CDK.
Puoi usare il construct CDK generato in packages/common/constructs
per distribuire il sito.
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'); }}
Questo configura:
- Un bucket S3 per l’hosting dei file statici
- Distribuzione CloudFront per la delivery globale
- Web ACL WAF per la sicurezza
- Origin Access Control per l’accesso sicuro a S3
- Deployment automatico dei file e config runtime
Per distribuire, raccomandiamo di usare il generatore terraform#project
per creare un progetto Terraform.
Puoi usare il modulo Terraform generato in packages/common/terraform
per distribuire il sito.
# Distribuisci il sito webmodule "my_website" { source = "../../common/terraform/src/app/static-websites/my-website"
providers = { aws.us_east_1 = aws.us_east_1 }}
Questo configura:
- Un bucket S3 per l’hosting dei file statici
- Distribuzione CloudFront per la delivery globale
- Web ACL WAF per la sicurezza (distribuito in us-east-1)
- Origin Access Control per l’accesso sicuro a S3
- Deployment automatico dei file e config runtime