Wpis z mikrobloga

#programowanie #webdev

Jeszcze niedawno jak pisało się aplikację webową, to robiło się jeden projekt. Backend (np. w #spring lub #aspnet) i w tym samym projekcie robiło się frontend (jakieś Spring MVC z szablonami w JSP lub odpowiednik). Teraz robi się API REST i dzięki temu backend jest bardziej niezależny od frontendu (jakiś #angular #react czy coś innego).

I są dwa podejścia jak można do tego podejść.
1. Robimy dwa oddzielne projekty. Jeden backendowy (np. w Springu) a drugi frontendowy (np. w Angularze). Jak wdrażamy rozwiązanie, to musimy wdrażać obie aplikacje oddzielnie (np. jeden na Tomcata, a drugi na jakiś HTTP Server).
To jest dobre jak jest jedno API i wiele różnych aplikacji frontowych. Ale często tak jest, że jest po prostu jeden projekt i nie jest przewidywana inna aplikacja frontowa. A REST-a i Angulara się używa, bo jest wygodne. Dlatego dla wygody można to zamknąć w jednym projekcie:
2. Robimy jeden projekt backendowy. Piszemy sobie API i udostępniamy dodatkowo jeden publiczny folder. Wrzucamy tam cały folder z plikami frontendu. Jak wdrażamy takie coś, to wdrażamy tylko jedną aplikację (fizycznie są dwie, ale zamknięte w jednej). Jest to dużo wygodniejsze.

Jak używało się zwykłego JavaScriptu i np. starego AngularJS, to wszystko było ok. Teraz jednak używa się Gulpa/Webpacka czy innych builderów (do TypeScripta, Babela, SCSS itd. itd.). W jaki sposób wrzucić taki projekt frontendowy do projektu backendowego? Przypominam, że teraz front to nie tylko zwykłe pliki, które po zmianie wystarczy zapisać - teraz trzeba je jeszcze przekompilować.

Przyjmijmy, że używam Spring (Maven) + Angular 4 (Angular CLI, npm).

- Budować oddzielnie projekt frontowy i tylko skompilowany dist przerzucać do folderu w backendzie? Słabe, bo muszę kompilować dwa projekty (nie wspominając o pewnie problemach z hotswapem).
- Użyć jakiegoś buildera do Springa/Mavena (żeby on mi kompilował zamiast sam przez Angular CLI)? O ile takie coś istnieje. Słabe, bo uzależniam backend od frontendu.
- Coś innego?
  • 3
@mk321: Dwa projekty.
Development:
- backend - developujesz i normalnie uruchamiasz.
- frontend - uruchamiasz na developerskim serwerze (praktycznie wszystkie narzędzia powinny coś mieć, Webpack ma na 100%) i developujesz z "hotswapem" (po każdej zmianie jest rebuild cząstkowy i refresh).

Deployment: deployujesz na dwa rożne serwery (dla backendu jakiś Tomcat, dla frontendu coś co serwuje statyczne pliki). W przyszlości pozwoli to np. zrobić wsadzić load balancer, cdny i inne dziwne rzeczy
@mk321: Wszystko może działać na jednym serwerze na różnych portach

@elwin013: Tomcat nie jest serwerem tylko kontenerem servletów, nie zapewnia wszystkich funkcjonalności wymaganych do bycia serwerem javy. Serwerem jest np apache geronimo, oracle glassfish