# Structure d'une application Redwood
Examinons maintenant les fichiers et répertoires qui ont été créés pour nous (laissons de côté les fichiers de configuration sur lesquels nous reviendrons plus tard)
├── api
│ ├── prisma
│ │ ├── schema.prisma
│ │ └── seeds.js
│ └── src
│ ├── functions
│ │ └── graphql.js
│ ├── graphql
│ ├── lib
│ │ └── db.js
│ └── services
└── web
├── public
│ ├── README.md
│ ├── favicon.png
│ └── robots.txt
└── src
├── Routes.js
├── components
├── index.css
├── index.html
├── index.js
├── layouts
└── pages
├── FatalErrorPage
│ └── FatalErrorPage.js
└── NotFoundPage
└── NotFoundPage.js
Au premier niveau nous avons deux répertoires, api et web. Redwood sépare le backend (api) et le frontend (web) au sein du projet. (Yarn qualifie cette séparation de "workspaces". Avec Redwood, on fait plutôt référence aux "côtés" web et api de l'application). Ainsi, lorsque plus tard vous serez amené à ajouter des packages, il vous faudra préciser dans quel côté ils doivent aller. Par exemple, (inutile d'exécuter ces commandes):
yarn workspace web add marked
yarn workspace api add better-fs
# Le Répertoire /api
A l'intérieur du répertoire api se trouve deux sous-répertoires :
-
prismacontient du code d'infratructure relatif à la base de donnéeschema.prismacontient le schéma de la base de données (ses tables et ses colonnes)seeds.jsest utilisé pour initialiser la base de données avec les données de base nécessaire à votre application (utilisateur admin, configuration diverses..).
Lorsque nous aurons créé notre première table dans la base de données, nous trouverons également à cet endroit une base de données SQLite sous la forme d’un fichier
dev.db, ainsi qu’un répertoiremigrationscontenant des captures successives du schéma au fil de son évolution. -
srccontient l'ensemble du code côté backend.api/srccontient quatre répertoires supplémentaires :functionscontiendra toutes les fonctions lambda utilisées par votre application en plus du fichiergraphql.jsgénéré automatiquement par Redwood. Ce dernier fichier est requis pour utiliser une API GraphQL.graphqlcontient votre schéma GraphQL écrit au format SDL (Schema Definition Language). Les fichiers SDL se terminent par.sdl.js.libcontient un seul fichier,db.js, qui instancie le client Prisma utilisé pour dialoguer avec la base de données. Vous pouvez parfaitement personnaliser ce fichier en ajoutant des options supplémentaires. Vous pouvez utiliser ce répertoire pour tout code relatif au côté API de votre application qui ne trouverai pas sa place dansfunctionsouservices.servicescontient la logique métier de votre application. Lorsque vous effectuez une requête ou une mutation de données via GraphQL, ce code se trouve ici dans un format réutilisable depuis d’autres endroits de votre application.
Et nous en avons terminé avec la partie backend.
# Le répertoire /web
srccontient plusieurs sous-répertoires :componentscontient vos composants React traditionnels ainsi que les Cells introduites par Redwood (nous y reviendrons bientôt en détail).layoutscontient du code HTML sous forme de composants qui viennent entourer le contenu de votre application et sont partagés par les différentes Pages.pagescontient des composants souvent insérés dans les Layouts et qui constituent les points d'entrées de votre application pour une URL donnée (une URL comme/articles/hello-worldcorrespondra ainsi à une page tandis que/contact-uscorrespondra à une autre page). Chaque nouvelle application comprend deux pages par défaut :NotFoundPage.jsqui est utilisée lorsqu’aucune route n’est trouvée par le routeur (voirRoutes.jsplus bas).FatalErrorPage.jsqui est utilisée lorsqu’une erreur survient, qu’elle n’a pas été gérée, et qu’il n’est pas possible de poursuivre plus avant sans faire exploser l’application (en général il s’agit d’une page blanche).
publiccontient des ressources non utilisées par vos composants React (En bout de chaîne, ces ressources seront copiées sans être modifiées dans le répertoire racine de l’application finale):favicon.pngest l’icône utilisée par les onglets des navigateurs lorsqu’une page est ouverte (par défaut il s’agit du logo RedwoodJS).robots.txtest utilisé pour controller ce que les moteurs de recherche sont autorisé à indexer.README.mdexplique comment, et quand, utiliser le répertoirepublicpour vos ressources statiques. Il mentionne également les bonnes méthodes pour importer des ressources à l'intérieur des composants via Webpack. Vous pouvez également lire à ce sujet ce fichier README.md sur GitHub.
index.cssest l'endroit par défaut où placer vos règles CSS. Il existe cependant d’autres possibilités avancées.index.htmlest le point d’entrée React standard de votre application.index.jscontient le code de démarrage pour une application Redwood.Routes.jscontient les définitions des routes de l’application afin de faire correspondre chaque URL à une Page.