मान लीजिए कि मेरे पास एक फ्रंट-एंड है, जो ज्यादातर कोणीय, ग्रन्ट और बोवर का उपयोग करके लिखा गया एकल-पृष्ठ अनुप्रयोग है। और मान लीजिए कि मेरे पास एक बैकएंड है, जो ज्यादातर एक ORM के शीर्ष पर बैठा एक REST API है, जो किसी डेटाबेस से ऑब्जेक्ट्स को संग्रहीत / पुनर्प्राप्त करता है, जो कि ग्रंट, एक्सप्रेस और सीक्वेल जैसी चीजों का उपयोग करता है।
कोणीय एप्लिकेशन उपयोगकर्ता द्वारा देखे जाने वाले सभी दृश्य सामानों को करता है, लेकिन ऐसा बैक-एंड द्वारा प्रदान की गई सेवाओं पर जीयूआई होने से होता है।
स्वतंत्र विकास, संस्करणकरण, निरंतर एकीकरण, विकास को धक्का आदि की अनुमति देने के लिए, इसे दो अलग-अलग कोडबेस में अलग करना वांछनीय होगा।
मेरा सवाल यह है कि इसे साफ-सुथरा करने के लिए क्या तरीके हैं? क्या फुल-स्टैक जावास्क्रिप्ट के लिए सर्वोत्तम प्रथाओं की सिफारिश की गई है?
विकल्प # 1 एक अखंड प्रतीत होता है, अर्थात "उन्हें अलग न करें"। समर्थक यह है कि बिल्ड चेन सरल है, और सब कुछ एक ही स्थान पर है - लेकिन कई विपक्ष लगते हैं; स्वतंत्र रूप से संस्करण के लिए कठिन है, एक टूटे हुए सामने का मतलब एक गैर-तैनाती योग्य पीठ, और इसी तरह है।
विकल्प # 2 एक अर्ध-मोनोलिथ लगता है, जहां फ्रंट-एंड बिल्ड चेन के परिणामस्वरूप बैक-एंड के लिए फाइलों का एक गुच्छा लिखने में परिणाम होता है। dist
सामने के अंत पर निर्देशिका बैक-एंड पर कुछ निर्देशिका को उल्लेख करता है, तो अनिवार्य रूप से जब सामने के छोर minifies, uglifies, आदि, यह पीछे के अंत है, जो सब कुछ चलाता है पर प्रकाशित करने से समाप्त होता है।
विकल्प # 3 पूर्ण-पृथक्करण लगता है: फ्रंट-एंड और बैक-एंड प्रत्येक अलग पोर्ट पर अपने स्वयं के सर्वर चलाते हैं, और वे पूरी तरह से अलग प्रोजेक्ट हैं। दोष यह लगता है कि उन्हें एक दूसरे के बंदरगाहों के बारे में जानने के लिए कॉन्फ़िगर करने की आवश्यकता है; बैक-एंड को कॉर्स को फ्रंट-एंड से अनुमति देनी चाहिए, और फ्रंट-एंड को यह जानने की आवश्यकता है कि उन सभी एंडपॉइंट्स की उम्मीद कहां है।
विकल्प # 4 पूरी चीज़ को एक साथ रिग करने के लिए डॉकटर-कंपोज़ जैसे कुछ का उपयोग करने के लिए हो सकता है।
मुझे यकीन है कि अन्य विकल्प भी हैं। अनुशंसित सर्वोत्तम अभ्यास क्या है?