Supponiamo di avere un front-end che è principalmente un'applicazione a pagina singola scritta usando angolare, grugnito e pergolato. E supponiamo di avere un back-end, che è per lo più solo un'API REST posta sopra un ORM, che memorizza / recupera oggetti da un database, usando cose come grunt, express e sequelize.
L'applicazione angolare fa tutte le cose visive che l'utente vede, ma lo fa essendo una GUI rispetto ai servizi forniti dal back-end.
Sarebbe auspicabile separare questi in due diversi codebase, per permettere sviluppo indipendente, versioning, integrazione continua, spinta allo sviluppo, ecc.
La mia domanda è: quali metodi sono disponibili per farlo in modo pulito? Sono consigliate le migliori pratiche per lo javascript completo?
L'opzione n. 1 sembra essere un monolite, cioè "non separarli". Il pro è che la catena di costruzione è semplice, e tutto è in un posto - ma sembrano esserci molti svantaggi; più difficile alla versione indipendentemente, un fronte rotto significa uno schieramento non schierabile, e così via.
L'opzione # 2 sembra essere un quasi-monolite, in cui la catena di build front-end risulta nella scrittura di un mucchio di file sul back-end. La directory dist
sul front-end si riferirebbe ad alcune directory sul back-end, quindi essenzialmente quando il front-end riduce, uglifies, ecc, finisce la pubblicazione sul back-end, che esegue tutto.
L'opzione n. 3 sembra completa separazione: front-end e back-end eseguono ciascuno i propri server su porte diverse e sono progetti completamente separati. Lo svantaggio sembra che debbano essere configurati per conoscere le rispettive porte; il back-end deve consentire CORS dal front-end e il front-end deve sapere dove si prevede che tutti questi endpoint siano.
L'opzione # 4 potrebbe essere quella di usare qualcosa come la docker-compose per assemblare l'intero insieme.
Sono sicuro che ci sono altre opzioni. Qual è la migliore pratica consigliata?