Salta ai contenuti

Sito Web React

Questo generatore crea un nuovo sito web React con Cloudscape configurato di default, 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.

Puoi generare un nuovo Sito Web React in due modi:

  1. Installa il Nx Console VSCode Plugin se non l'hai già fatto
  2. Apri la console Nx in VSCode
  3. Clicca su Generate (UI) nella sezione "Common Nx Commands"
  4. Cerca @aws/nx-plugin - ts#react-website
  5. Compila i parametri richiesti
    • Clicca su Generate
    Parametro Tipo Predefinito Descrizione
    name Obbligatorio string - The name of the application.
    directory string packages The directory of the new application.
    uxProvider string Cloudscape The preferred UX provider.
    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.

    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 generale e la barra di navigazione
      • Directoryhooks
        • useAppLayout.tsx Hook per regolare il Cloudscape AppLayout da componenti annidati (se UX Provider è impostato su Cloudscape)
      • Directoryroutes
        • index.tsx Route di esempio (o pagina) per TanStack 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

    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

    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 generico StaticWebsite

    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.

    Il tuo sito Cloudscape include TanStack Router configurato di default. Questo semplifica l’aggiunta di nuove route:

    1. Avvia il Server di Sviluppo Locale
    2. Crea un nuovo file <nome-pagina>.tsx in src/routes, con la posizione nell’albero dei file che rappresenta il percorso
    3. Noterai che un Route e RouteComponent vengono generati automaticamente. Puoi iniziare a costruire la tua pagina qui!

    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.

    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 dell’applicazione.

    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.

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

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

    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:

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

    Puoi eseguire un server di sviluppo locale usando i target serve o serve-local.

    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 il seguente comando:

    Terminal window
    pnpm nx run <my-website>:serve

    Questo target è utile per lavorare a modifiche del sito puntando ad API “reali” distribuite e altra infrastruttura.

    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 che hai connesso al sito tramite il generatore API Connection.

    Quando il server locale del sito è eseguito tramite questo target, runtime-config.json viene automaticamente sovrascritto per puntare agli URL delle API in esecuzione localmente.

    Puoi eseguire questo target con il seguente comando:

    Terminal window
    pnpm 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 ts#react-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 root dist/packages/<my-website>/bundle, oltre a type-checking, compilazione e linting del sito.

    Terminal window
    pnpm nx run <my-website>:build

    Testare il sito web è simile a scrivere test in un progetto TypeScript standard, quindi consulta la guida TypeScript project per maggiori dettagli.

    Per test specifici React, React Testing Library è già installato e disponibile per scrivere test. Per dettagli sul suo utilizzo, consulta la documentazione React Testing Library.

    Puoi eseguire i test con il target test:

    Terminal window
    pnpm nx run <my-website>:test

    Il generatore React website crea infrastruttura as code CDK o Terraform in base al iacProvider selezionato. Puoi usarla per distribuire il sito.

    Per distribuire il sito, 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.

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

    Questo configura:

    1. Un bucket S3 per l’hosting dei file statici del sito web
    2. Distribuzione CloudFront per la delivery globale dei contenuti
    3. Web ACL WAF per la protezione di sicurezza
    4. Origin Access Control per l’accesso sicuro a S3
    5. Deployment automatico dei file del sito web e della configurazione runtime