Site Web React
Ce générateur crée un nouveau site React préconfiguré avec CloudScape, ainsi que l’infrastructure AWS CDK pour déployer votre site web dans le cloud en tant que site statique hébergé dans S3, servi par CloudFront et protégé par WAF.
L’application générée utilise Vite comme outil de build et bundler. Elle emploie TanStack Router pour le routage typé.
Utilisation
Section intitulée « Utilisation »Générer un site web React
Section intitulée « Générer un site web React »Vous pouvez générer un nouveau site web React de deux manières :
- Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
- Ouvrez la console Nx dans VSCode
- Cliquez sur
Generate (UI)
dans la section "Common Nx Commands" - Recherchez
@aws/nx-plugin - ts#react-website
- Remplissez les paramètres requis
- Cliquez sur
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
Vous pouvez également effectuer une simulation pour voir quels fichiers seraient modifiés
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
Paramètre | Type | Par défaut | Description |
---|---|---|---|
name Requis | 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. |
Résultat du générateur
Section intitulée « Résultat du générateur »Le générateur créera la structure de projet suivante dans le répertoire <directory>/<name>
:
- index.html Point d’entrée HTML
- public Assets statiques
Répertoiresrc
- main.tsx Point d’entrée de l’application avec la configuration React
- config.ts Configuration de l’application (ex: logo)
Répertoirecomponents
- AppLayout Composants pour le layout CloudScape et la barre de navigation
Répertoirehooks
- useAppLayout.tsx Hook pour ajuster l’AppLayout depuis des composants imbriqués
Répertoireroutes
Répertoirewelcome
- index.tsx Exemple de route (ou page) pour @tanstack/react-router
- styles.css Styles globaux
- vite.config.ts Configuration Vite et Vitest
- tsconfig.json Configuration TypeScript de base pour le code source et les tests
- tsconfig.app.json Configuration TypeScript pour le code source
- tsconfig.spec.json Configuration TypeScript pour les tests
Le générateur créera également le code d’infrastructure CDK pour déployer votre site web dans le répertoire packages/common/constructs
:
Répertoiresrc
Répertoireapp
Répertoirestatic-websites
- <name>.ts Infrastructure spécifique à votre site web
Répertoirecore
- static-website.ts Construct générique StaticWebsite
Implémentation de votre site web React
Section intitulée « Implémentation de votre site web React »La documentation React est un bon point de départ pour apprendre les bases du développement avec React. Vous pouvez consulter la documentation CloudScape pour les détails sur les composants disponibles et leur utilisation.
Création d’une route/page
Section intitulée « Création d’une route/page »Votre site CloudScape est préconfiguré avec TanStack Router par défaut. Cela facilite l’ajout de nouvelles routes :
- Lancer le serveur de développement local
- Créer un nouveau fichier
<page-name>.tsx
danssrc/routes
, où la position dans l’arborescence représente le chemin - Une
Route
et unRouteComponent
sont générés automatiquement. Vous pouvez commencer à développer votre page ici !
Navigation entre les pages
Section intitulée « Navigation entre les pages »Vous pouvez utiliser le composant Link
ou le hook useNavigate
pour naviguer entre les pages :
import { Link, useNavigate } from '@tanstack/react-router';
export const MyComponent = () => { const navigate = useNavigate();
const submit = async () => { const id = await ... // Utiliser `navigate` pour rediriger après une action asynchrone navigate({ to: '/products/$id', { params: { id }} }); };
return ( <> <Link to="/products">Annuler</Link> <Button onClick={submit}>Valider</Button> </> )};
Pour plus de détails, consultez la documentation TanStack Router.
Configuration runtime
Section intitulée « Configuration runtime »La configuration de votre infrastructure AWS CDK est fournie à votre site web via la Configuration Runtime. Cela permet à votre site d’accéder à des détails comme les URLs d’API qui ne sont connus qu’au moment du déploiement.
Infrastructure
Section intitulée « Infrastructure »Le construct CDK RuntimeConfig
permet d’ajouter et récupérer des valeurs de configuration dans votre infrastructure CDK. Les constructs CDK générés par @aws/nx-plugin
(comme les API tRPC et FastAPIs) ajouteront automatiquement les valeurs appropriées au RuntimeConfig
.
Votre construct CDK de site web déploiera la configuration runtime sous forme de fichier runtime-config.json
à la racine de votre 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);
// Ajoute automatiquement des valeurs au RuntimeConfig new MyApi(this, 'MyApi', { integrations: MyApi.defaultIntegrations(this).build(), });
// Déploie automatiquement la config runtime dans runtime-config.json new MyWebsite(this, 'MyWebsite'); }}
Vous devez vous assurer de déclarer votre site web après tout construct qui ajoute des valeurs au RuntimeConfig
, sans quoi elles seront absentes du fichier runtime-config.json
.
Code du site web
Section intitulée « Code du site web »Dans votre site web, vous pouvez utiliser le hook useRuntimeConfig
pour récupérer les valeurs de la configuration runtime :
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
const MyComponent = () => { const runtimeConfig = useRuntimeConfig();
// Accéder aux valeurs de la config runtime ici const apiUrl = runtimeConfig.apis.MyApi;};
Configuration runtime locale
Section intitulée « Configuration runtime locale »Pour exécuter le serveur de développement local, vous aurez besoin d’un fichier runtime-config.json
dans votre répertoire public
afin que votre site local connaisse les URLs des backends, la configuration d’authentification, etc.
Votre projet de site web est configuré avec une cible load:runtime-config
que vous pouvez utiliser pour récupérer le fichier runtime-config.json
depuis une application déployée :
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"
Si vous modifiez le préfixe des noms de stage dans le src/main.ts
de votre projet d’infrastructure, vous devrez mettre à jour la cible load:runtime-config
dans le fichier project.json
de votre site web en conséquence.
De plus, notez que la cible load:runtime-config
suppose qu’un seul stage de votre application est déployé dans l’environnement pour lequel vous avez des credentials AWS. Vous devrez ajuster la commande si vous déployez plusieurs stages dans le même compte et région.
Serveur de développement local
Section intitulée « Serveur de développement local »Vous pouvez lancer un serveur de développement local en utilisant les cibles serve
ou serve-local
.
Cible Serve
Section intitulée « Cible Serve »La cible serve
démarre un serveur de développement local pour votre site web. Cette cible nécessite que toute infrastructure de support interagissant avec le site soit déployée, et que vous ayez chargé la configuration runtime locale.
Vous pouvez exécuter cette cible avec la commande :
pnpm nx run <my-website>:serve
yarn nx run <my-website>:serve
npx nx run <my-website>:serve
bunx nx run <my-website>:serve
Cette cible est utile pour travailler sur des modifications du site tout en pointant vers des APIs “réelles” déployées.
Cible Serve Local
Section intitulée « Cible Serve Local »La cible serve-local
démarre un serveur de développement local pour votre site web (avec le MODE Vite défini sur serve-local
), tout en démarrant les serveurs locaux des APIs connectées à votre site via le générateur de connexion API.
Lorsque le serveur local est exécuté via cette cible, le runtime-config.json
est automatiquement remplacé pour pointer vers les URLs de vos APIs locales.
Vous pouvez exécuter cette cible avec la commande :
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
Cette cible est utile lorsque vous travaillez à la fois sur votre site web et vos APIs et souhaitez itérer rapidement sans déployer l’infrastructure.
Dans ce mode, si aucun runtime-config.json
n’est présent et que vous avez configuré l’authentification Cognito (via le générateur d’authentification pour site CloudScape), la connexion sera ignorée et les requêtes vers vos serveurs locaux n’incluront pas d’en-têtes d’authentification.
Pour activer la connexion et l’authentification en mode serve-local
, déployez votre infrastructure et chargez la configuration runtime.
Vous pouvez construire votre site web avec la cible build
. Cela utilise Vite pour créer un bundle de production dans le répertoire dist/packages/<my-website>/bundle
, tout en vérifiant les types, compilant et lintant votre site.
pnpm nx run <my-website>:build
yarn nx run <my-website>:build
npx nx run <my-website>:build
bunx nx run <my-website>:build
Tester votre site web est similaire à l’écriture de tests dans un projet TypeScript standard. Reportez-vous au guide des projets TypeScript pour plus de détails.
Pour les tests spécifiques à React, React Testing Library est déjà installé et disponible. Consultez la documentation React Testing Library pour son utilisation.
Vous pouvez exécuter vos tests avec la cible 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
Déploiement du site web
Section intitulée « Déploiement du site web »Pour déployer votre site web, nous recommandons d’utiliser le Générateur d’Infrastructure TypeScript pour créer une application CDK.
Vous pouvez utiliser le construct CDK généré dans packages/common/constructs
pour déployer votre site web.
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'); }}