J'aime vraiment la structure des dossiers comme on peut le voir ici quand il s'agit d'un frontend React et un certain backend avec express:
root
├── backend
| ├── node_modules
| ├── public
| ├── src
│ │ └── Server.ts
| ├── package.json
| └── tsconfig.json
├── frontend (created using create-react-app)
| ├── node_modules
| ├── public
| ├── src
│ │ └── Index.js
| ├── package.json
| └── tsconfig.json
Je pense qu'avoir des paquets séparés avec des node_modules
est raisonnable puisque le frontend et le backend sont fondamentalement des choses complètement différentes, e. g. ils ont besoin de différents modules de nœuds. De plus, cette approche modulaire me plaît visuellement et le référentiel a l'air bien rangé.
Cependant, je rencontre un problème avec cette structure lorsque je dois partager du contenu entre le frontend et le backend. J'ai ajouté un dossier shared
sous la racine du projet qui contient son propre projet avec son propre tsconfig.json
, package.json
etc. Cette approche est un mélange des approches ici et ici . Pour le backend, cela fonctionne parfaitement: après avoir configuré le tsconfig.json
de manière appropriée (en utilisant Références de projet TypeScript et importations avec alias ), je peux référencer le fichier root/shared/src/myFile.ts
comme ça:
import { myFunction } from @shared/myFile;
J'ai créé l'interface React en utilisant create-react-app
. Ce n'est pas grave pour moi que les importations d'alias ne fonctionnent pas, donc je devrais utiliser (dans le dossier src du frontend):
import { myFunction } from '../../shared/src/myFile';
Malheureusement, ces importations depuis l'extérieur du répertoire src
ne sont pas prises en charge par create-react-app
et je ne veux pas utiliser eject
car je n'ai aucune expérience avec webpack et je ne veux pas gérer tous les fichiers de configuration par moi-même (c'est pourquoi je utilisé create-react-app
en premier lieu).
Je sais que je peux déplacer le contenu partagé vers le répertoire src
du frontend. Mais cela signifierait que je devais ajouter les balises nécessaires pour utiliser Références de projet dans TypeScript , e. g. définir composite
sur true, dans le tsconfig.json
qui me semble étrange et ressemble plus à un hack. J'aimerais avoir un projet npm séparé avec mon contenu partagé.
Puisque create-react-app
ne supporte pas intrinsèquement les importations depuis l'extérieur du répertoire src
, je pensais que je me trompais peut-être. La structure de dossiers que j'utilise actuellement n'est-elle pas un moyen valable de configurer un projet React avec un backend? Quel mécanisme create-react-app
permet de lier des fichiers entre le frontend et le backend? Je pourrais aussi penser à avoir un projet racine avec un dossier src
et à l'intérieur de celui-ci les deux dossiers backend
et frontend
. Mais cela signifie que nous en aurions un partagé node_modules
dossier à la racine.
C'est mon premier projet avec React et j'aimerais connaître quelques bonnes pratiques pour ce genre de problème d'architecture ). Quelques liens vers des ressources fiables où les structures de projet pour le développement full-stack React développement sont expliquées seraient vraiment utiles. Merci ????
Je pense qu'il est parfaitement raisonnable de vouloir partager du code entre votre front et votre back-end. C'est l'une des raisons pour lesquelles nous codons en javascript au lieu de Ruby ou PHP.
Vous pouvez accomplir exactement ce que vous voulez en utilisant yarn au lieu des espaces de travail npm et yarn: https://yarnpkg.com/lang/en/docs/workspaces/ . Au niveau supérieur, vous configurez trois modules/packages dans votre package.json (assurez-vous de nommer correctement les espaces de travail dans leurs fichiers package.json respectifs):
"workspaces": {
"packages": [
"backend",
"frontend",
"shared"
]
},
Une fois que vous avez fait, vous pouvez importer du code partagé dans votre application de l'ARC ou votre back-end, simplement comme ceci:
import { myFunction } from 'shared/src/myFile';
Le seul inconvénient est que vous ne pouvez pas importer de composants de réaction du répertoire shared dans frontend tant que vous utilisez l'ARC. Cela ne vous affectera plus maintenant, car vous n'avez qu'une seule application de réaction. Si vous avez besoin de partager des composants de réaction entre plusieurs projets, consultez les suggestions ci-dessus comme bit.dev.
Ce n'est pas le seul moyen, mais c'est l'un des plus simples et des plus directs.
Avoir des sous-projets séparés pour le frontend et le backend est parfaitement logique en raison de dépendances très différentes. Le mélanger augmente la consommation d'espace disque dans les déploiements de production et va à l'encontre des consignes de sécurité. La structure de vos dossiers est raisonnable (sauf pour public/
sous-dossiers dont je ne suis pas sûr, il me manque peut-être quelque chose).
L'approche import { myFunction } from @shared/myFile;
c'est bien. N'utilisez simplement pas l'ARC.
Pour un projet avec un seul frontend et un seul backend, il n'est pas nécessaire d'avoir un shared\
dossier de niveau supérieur car le frontend est la seule source de "vérité de l'interface utilisateur" (par exemple la source des types et des composants liés à l'interface utilisateur) qui est consommée par le frontend et le backend est la seule source de "vérité API" consommée par à la fois frontend et backend. Avec cet arrangement seulement @backend/api_shared_stuff
doit être partagé.
Certains liens vers des ressources fiables où les structures de projet pour le développement full-stack React développement sont expliquées seraient vraiment utiles. D'une part, les auteurs de projets doivent généralement expliquer beaucoup de d'autres choses et d'autre part garder la documentation (généralement un README) raisonnablement concise.