जावास्क्रिप्ट के साथ मोनोरिपॉजिटरी: कोड का व्यावहारिक संगठन
\n\nजावास्क्रिप्ट (Node.js) में जटिल परियोजनाओं का विकास अक्सर कोड प्रबंधन की समस्या का सामना करता है। जब आपके पास कई पैकेज, लाइब्रेरी या माइक्रोसर्विसेज होते हैं, जिनमें से प्रत्येक अपने स्वयं के रिपॉजिटरी में रहता है, तो इससे कोड का दोहराव, संस्करणों के सिंक्रनाइज़ेशन में जटिलता और CI/CD में मंदी आती है। समाधान है — मोनोरिपॉजिटरी (monorepo)। इस लेख में, हम विश्लेषण करेंगे कि व्यवहार में जावास्क्रिप्ट के साथ मोनोरिपॉजिटरी कैसे व्यवस्थित करें: उपकरणों के चयन से लेकर बिल्ड और प्रकाशन के कॉन्फ़िगरेशन तक।
\n\nमोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?
\n\nमोनोरिपॉजिटरी कोड प्रबंधन का एक दृष्टिकोण है, जिसमें परियोजना के सभी पैकेज, लाइब्रेरी और एप्लिकेशन एक ही रिपॉजिटरी में संग्रहीत होते हैं। मल्टीरिपॉजिटरी (प्रत्येक पैकेज अपने स्वयं के रिपो में) के विपरीत, मोनोरिपॉजिटरी प्रदान करता है:
\n\n- \n
- एकीकृत परिवर्तन इतिहास: आसानी से ट्रैक करें कि एक भाग में परिवर्तन दूसरे को कैसे प्रभावित करता है। \n
- कोड का पुन: उपयोग: सामान्य उपयोगिताएँ और घटक npm में प्रकाशित किए बिना एक ही स्थान पर रहते हैं। \n
- सरलीकृत रिफैक्टरिंग: एक पैकेज के API में परिवर्तन तुरंत सभी आश्रितों में दिखाई देता है। \n
- एकीकृत CI/CD सेटिंग्स: सभी पैकेजों के लिए एक कॉन्फ़िगरेशन फ़ाइल। \n
जावास्क्रिप्ट (Node.js) के लिए, मोनोरिपॉजिटरी विशेष रूप से प्रासंगिक है, क्योंकि यह 'निर्भरता के भ्रम' से छुटकारा पाने और विकास को गति देने की अनुमति देता है। आइए व्यावहारिक कार्यान्वयन पर विचार करें।
\n\nजावास्क्रिप्ट में मोनोरिपॉजिटरी के लिए उपकरण
\n\nबाजार में कई लोकप्रिय उपकरण हैं। हम दो मुख्य पर विचार करेंगे: npm workspaces (npm में निर्मित) और Lerna (विस्तारित कार्यक्षमता)।
1. npm workspaces (अंतर्निहित समर्थन)
\n\nnpm v7 से शुरू करके, पैकेज मैनेजर workspaces का समर्थन करता है। यह शुरू करने का सबसे आसान तरीका है। प्रोजेक्ट संरचना का उदाहरण:
\n\nmy-monorepo/\n├── packages/\n│ ├── core/\n│ │ ├── package.json\n│ │ └── index.js\n│ ├── utils/\n│ │ ├── package.json\n│ │ └── helpers.js\n│ └── app/\n│ ├── package.json\n│ └── server.js\n├── package.json\n└── lerna.json (वैकल्पिक)\n\nरूट package.json:
{\n "name": "my-monorepo",\n "private": true,\n "workspaces": ["packages/*"]\n}\n\nअब packages/* में सभी पैकेज स्वचालित रूप से लिंक हो जाते हैं। निर्भरताएँ स्थापित करने के लिए, रूट में npm install चलाना पर्याप्त है। पैकेजों के बीच निर्भरताएँ मानक रूप से इंगित की जाती हैं:
// packages/app/package.json\n{\n "name": "@my/app",\n "dependencies": {\n "@my/core": "*",\n "@my/utils": "*"\n }\n}\n\nnpm workspaces node_modules फ़ोल्डर में सिमलिंक बनाता है, इसलिए इम्पोर्ट सामान्य पैकेजों की तरह काम करते हैं।
2. Lerna (उन्नत प्रबंधन)
\n\nLerna प्रकाशन, संस्करण और समानांतर में स्क्रिप्ट निष्पादित करने की क्षमता वाला मोनोरिपॉजिटरी प्रबंधन के लिए एक उपकरण है। स्थापना:
\n\nnpm install --global lerna\n\nप्रोजेक्ट में आरंभीकरण:
\n\nlerna init\n\nफ़ाइल lerna.json:
{\n "version": "independent",\n "npmClient": "npm",\n "packages": ["packages/*"]\n}\n\nindependent मोड प्रत्येक पैकेज को अपना स्वयं का संस्करण रखने की अनुमति देता है। मुख्य कमांड:
- \n
lerna bootstrap— निर्भरताएँ स्थापित करता है और पैकेजों को लिंक करता है। \n lerna run build— सभी पैकेजों मेंbuildस्क्रिप्ट निष्पादित करता है। \n lerna publish— संशोधित पैकेजों को npm में प्रकाशित करता है। \n
कोड का व्यावहारिक संगठन
\n\nआइए Node.js पर बैकएंड और सामान्य उपयोगिताओं के साथ वेब एप्लिकेशन के लिए मोनोरिपॉजिटरी सेट करने के एक उदाहरण पर विचार करें।
\n\nचरण 1: मूल संरचना
\n\nहम तीन पैकेज बनाएंगे:
\n\n