Załóżmy, że mam interfejs, który jest w większości jednostronicową aplikacją napisaną za pomocą kątownika, pomruku i altany. Przypuśćmy, że mam backend, który jest w większości po prostu interfejsem API REST umieszczonym na ORM, który przechowuje / pobiera obiekty z bazy danych, używając takich funkcji, jak chrząknięcie, ekspresowe i sekwencjonowanie.
Aplikacja kątowa wykonuje wszystkie wizualne rzeczy, które widzi użytkownik, ale robi to, będąc graficznym interfejsem użytkownika w stosunku do usług świadczonych przez back-end.
Pożądane byłoby podzielenie ich na dwie różne bazy kodowe, aby umożliwić niezależny rozwój, wersjonowanie, ciągłą integrację, usprawnianie itp.
Moje pytanie brzmi: jakie są dostępne metody robienia tego w czysty sposób? Czy są zalecane najlepsze praktyki dotyczące javascript z pełnym stosem?
Opcja nr 1 wydaje się być monolitem, tzn. „Nie rozdzielaj ich”. Zaletą jest to, że łańcuch kompilacji jest prosty i wszystko jest w jednym miejscu - ale wydaje się, że istnieje wiele wad; trudniejsza do samodzielnej wersji, zepsuty przód oznacza nierozkładalny tył i tak dalej.
Opcja nr 2 wydaje się quasi-monolitem, w którym łańcuch kompilacji frontonu powoduje zapisanie kilku plików na zapleczu. dist
Katalog na front-end będzie odnosić się do jakiegoś katalogu na back-end, więc zasadniczo, gdy przednie minifies końcowe, uglifies, etc, to kończy się publikowania na back-end, czyli wszystko.
Opcja nr 3 wydaje się być całkowicie oddzielna: front-end i back-end uruchamiają własne serwery na różnych portach i są to w pełni osobne projekty. Wadą wydaje się, że muszą być skonfigurowane tak, aby wiedzieć o swoich portach; back-end musi zezwalać na CORS z frontonu, a front-end musi wiedzieć, gdzie powinny się znajdować wszystkie te punkty końcowe.
Opcją # 4 może być użycie czegoś w rodzaju dokowania-komponowania, aby połączyć całość.
Jestem pewien, że istnieją inne opcje. Jaka jest zalecana najlepsza praktyka?
źródło
/
lokalizację nalocalhost:3000
(serwer frontonu) i/api/
nalocalhost:3001
(serwer interfejsu API). nginx będzie wtedy nasłuchiwał na domyślnym porcie http.Tak, należy je rozdzielić i traktować aplikację frontonu jak aplikację innej firmy - możesz w końcu dodać kolejnego klienta, na przykład aplikację mobilną, a jeśli pierwszy klient został zbudowany w ten sposób, Twoje życie będzie łatwiejsze.
Korzystanie z kontenerów dokowanych lub innego systemu wdrażania dotyczy głównie zaplecza, ponieważ interfejs użytkownika to tylko zasoby statyczne, które należy rozwiązać. Możesz hostować te zasoby statycznie na swoim serwerze lub w innym miejscu, takim jak CDN, takim jak cloudfront.
Unikanie corsów pozwoli ci zaoszczędzić trochę konfiguracji, ale jak wspomniano powyżej, jest to w pewnym sensie kwestia. Korzystanie z cors (i uwierzytelniania tokena) lepiej przygotuje backend również dla innych klientów.
Edycja: jeśli chodzi o najlepsze praktyki js pełnego stosu - powiedziałbym to, bądź konsekwentny. Jeśli używasz obietnic (i powinieneś), rób to po obu stronach. Zachowaj ten sam styl i formatowanie js, używaj tych samych bibliotek testowych (jeśli to możliwe) itp.
źródło