Po długich 3 miesiącach debat i badań dotyczących wyboru między React (z Redux) a Angular 2, zespół front-end w mojej firmie zdecydował się na Angular 2 (biorąc pod uwagę, że jest on bardziej odpowiedni dla naszego problemu).
Zajmujemy się biznesem aplikacji korporacyjnych, który obecnie składa się z wielu różnych technologii front-end (mając cały RESTful całego zaplecza), i chcieliśmy to wszystko wymienić i mieć jedną technologię, aby ułatwić przyszłe szkolenia i kontrolę jakości.
Biorąc pod uwagę naturę naszego produktu, jest on rozległy i są w nim moduły, które same w sobie są inną domeną i mogą być tworzone jako samodzielna aplikacja, ale sam produkt żyje pod jednym adresem URL.
Przykład;
Nazwijmy mój produkt jako SuperApp.
Jako interfejs użytkownika SuperApp ma standardowy system logowania i nawigację do podrzędnych modułów / podproduktów, dzięki czemu przepływ pracy wygląda następująco.
SuperApp
- Uwierzytelnij użytkownika
- Zapomnij kreatora hasła
- Strona publiczna dostępna bez autoryzacji
Uwierzytelniony użytkownik
System nawigacyjny
- Dom
- Podprodukt 1
- Podprodukt 2
- Podprodukt 3
Profil
...
...
Grupy
...
...
- Dom
Zauważ, że w powyższej reprezentacji Sub-product1
i Sub-product2
są to dwa zupełnie różne obszary, mające zupełnie różne domeny biznesowe.
Mogę teraz myśleć o tym, że mogę utworzyć SuperApp jako pojedynczy projekt Angular 2, zawierający tylko komponenty i widoki, które są istotne dla siebie, a SuperApp jest również odpowiedzialny za ładowanie wielu aplikacji potomnych; Sub-product1
, Sub-product2
(ponownie, różne projekty Angular 2, posiadające własne package.json
, webpack
config itp.) za pomocą głupich komponentów i działają jak powłoka zapewniająca routing najwyższego poziomu i symbol zastępczy do przechowywania tych aplikacji potomnych.
Po Sub-product1
załadowaniu do powłoki dołącza własne trasy do bieżącej trasy, na którą wylądowała SuperApp.
Powodem, dla którego chcę rozdzielić, jest to, że te różne aplikacje (które są obecnie budowane przy użyciu ExtJS) mają dedykowane zespoły pracujące nad nim (jesteśmy firmą posiadającą ponad 500 programistów), więc jeśli mają własne projekty Angular, mogą zarządzać narzędziami i zależności do ich upodobań bez polegania na aplikacji dziadka.
Ale nie jestem w stanie znaleźć nigdzie w oficjalnych dokumentach Angular ani w Internecie, czy zagnieżdżanie aplikacji Angular jest w ogóle możliwe (w taki sposób, że kod frameworku jest współdzielony, a zależności aplikacji potomnych są całkowicie izolowane i ładowane tylko wtedy, gdy aplikacja potrzebuje tego) lub czy istnieje alternatywne podejście do rozwiązania takiego problemu.
Wszelkie wskazówki, a nawet linki do odpowiednich artykułów będą mile widziane.