Je fais des recherches sur la façon de diviser un énorme monolithe à page unique en une architecture micro-frontale.
L'idée :
- la page est constituée de plusieurs composants qui fonctionneraient de manière autonome
- Chaque composant est géré par une seule équipe de développement.
- chaque équipe peut modifier, mettre à jour et déployer ses composants sans casser les composants des autres équipes.
- chaque équipe choisit sa propre boîte à outils
La raison
Pour développer efficacement de grandes applications, il faut que de nombreuses personnes y travaillent. Cependant, le nombre de développeurs par application/équipe n'est pas très évolutif. Le développement parallèle de plusieurs applications indépendantes par des équipes indépendantes peut cependant être adapté de manière arbitraire.
Dans cette optique, il est impératif que les équipes puissent choisir leur propre boîte à outils et, en particulier, effectuer des mises à jour indépendantes des bibliothèques de tiers (comme angular, react, jquery). Si ce n'était pas le cas, une mise à jour du framework devrait être compatible avec chaque composant avant de pouvoir le déployer en production.
Cela fonctionne-t-il avec Angular ?
Bien que des mises à jour indépendantes des versions soient nécessaires, il serait raisonnable de limiter les équipes à quelques frameworks supportés (Angular, React, Vue, Polymer...) et pour l'instant j'essaie de construire une démo purement constituée d'Angular-Apps.
Cependant, bien qu'Angular 5 soit censé être un cadre de plate-forme prenant en charge d'énormes applications multi-modules, il semble presque impossible de faire fonctionner plusieurs applications angulaires indépendantes dans la même fenêtre de navigateur.
J'ai réussi à amorcer plusieurs applications Angular (différentes versions, chacune hébergée sur son propre serveur) sur une seule application web en utilisant les importations HTML. Cependant, il y a plusieurs global
les dépendances qui doivent être partagées entre les applications.
- zone.js ne peut être lancé qu'une seule fois
- le routage nécessite des changements d'url
- Les éléments du navigateur tels que les cookies, le stockage de la session, etc.
Il existe plusieurs articles sur le net sur la façon d'amorcer plusieurs modules angulaires, mais ils font tous référence à plusieurs modules dans la même application principale, ce qui signifie qu'ils fonctionnent tous sur la même version de cadre et qu'une mise à jour signifie que vous devez reconstruire et déployer le monolithe entier.
Existe-t-il une solution autre que " iframes
"Comment faire fonctionner plusieurs applications Angular (5) sur la même page ?
2 votes
ce pourrait être une lecture intéressante pour vous. Il s'agit de la façon dont le portail Azure est construit, d'une manière similaire à ce que vous décrivez, bien qu'ils utilisent des iframes mais pas pour rendre l'interface utilisateur :
They can only run script in their IFRAME - which does not project UI.
yIFRAMEs are not used to render the UI - that’s all done in the core frame. The IFRAME is only used to automate the JavaScript APIs that communicate over window.postMessage().
1 votes
Très bonne question. Nous sommes confrontés au même défi, mais malheureusement, il semble que la communauté/équipe angulaire n'accorde pas beaucoup d'attention à ce sujet. Une lueur d'espoir semble être les éléments Angular. Mais il n'y a pas eu beaucoup plus d'informations à ce sujet depuis l'annonce. Voir github.com/angular/angular/issues/20891 - pas de réponse depuis 30 jours. Avec des frameworks comme vue ou react il semble possible de créer une ui composite pour les microservices. Je me demande pourquoi ce cas d'utilisation n'est pas encore couvert par Angular.
0 votes
Regardez dans Composants Web Angular
3 votes
@Daniel FYI Angular WebComponents ne résout pas le problème posé par le client. Actuellement, tous les composants Web que vous développez avec Angular doivent tous s'accrocher à la même version du bootstrap lorsque Angular se charge. Il n'est donc pas possible d'avoir différentes équipes travaillant sur différentes versions d'Angular et de faire en sorte que tous leurs composants se chargent dans une seule application Angular.
1 votes
Je me demandais comment vous aviez résolu ce problème. Avez-vous suivi l'une des solutions mentionnées ici ? Je serais heureux si vous pouviez partager votre solution. Je rencontre exactement le même problème.