Angenommen, ich habe ein Front-End, bei dem es sich hauptsächlich um eine einseitige Anwendung handelt, die mit Winkeln, Grunzen und Lauben geschrieben wurde. Und nehmen wir an, ich habe ein Backend, bei dem es sich meistens nur um eine REST-API handelt, die sich auf einem ORM befindet und Objekte aus einer Datenbank speichert / abruft.
Die eckige Anwendung erledigt alle visuellen Aufgaben, die dem Benutzer angezeigt werden. Dies geschieht jedoch über eine grafische Benutzeroberfläche für die vom Back-End bereitgestellten Dienste.
Es wäre wünschenswert, diese in zwei verschiedene Codebasen zu unterteilen, um eine unabhängige Entwicklung, Versionierung, kontinuierliche Integration, Push-to-Development usw. zu ermöglichen.
Meine Frage ist, welche Methoden gibt es, um dies sauber zu machen? Gibt es empfohlene Best Practices für Full-Stack-Javascript?
Option # 1 scheint ein Monolith zu sein, dh "trenne sie nicht". Der Vorteil ist, dass die Build-Kette einfach ist und alles an einem Ort ist - aber es scheint viele Nachteile zu geben; Unabhängig davon ist es schwieriger, Versionen zu erstellen. Eine kaputte Vorderseite bedeutet eine nicht einsetzbare Rückseite und so weiter.
Option 2 scheint ein Quasi-Monolith zu sein, bei dem die Front-End-Build-Kette dazu führt, dass eine Reihe von Dateien an das Back-End geschrieben werden. Das dist
Verzeichnis im Front-End verweist auf ein Verzeichnis im Back-End. Wenn also das Front-End minimiert, hässlich macht usw., wird es im Back-End veröffentlicht, das alles ausführt.
Option 3 scheint vollständig getrennt zu sein: Front-End und Back-End führen jeweils ihre eigenen Server an unterschiedlichen Ports aus, und es handelt sich um vollständig getrennte Projekte. Der Nachteil scheint, dass sie konfiguriert werden müssen, um die gegenseitigen Ports zu kennen. Das Back-End muss CORS vom Front-End aus zulassen, und das Front-End muss wissen, wo sich all diese Endpunkte voraussichtlich befinden.
Option 4 könnte sein, etwas wie Docker-Compose zu verwenden, um das Ganze zusammenzubauen.
Ich bin sicher, dass es noch andere Möglichkeiten gibt. Was ist die empfohlene Best Practice?