JavaScript के साथ मोनोरिपॉजिटरी: शुरुआती लोगों के लिए कोड संगठन
\nप्रोजेक्ट के बढ़ने और सामान्य तर्क (लॉजिक) के उभरने के साथ, जिसे एप्लिकेशन के विभिन्न भागों में पुन: उपयोग करने की आवश्यकता होती है, डेवलपर्स को कोड संगठन की समस्या का सामना करना पड़ता है। कई लोग फ़ाइलों को कॉपी करना, अलग-अलग npm पैकेज या जटिल मॉड्यूल बनाना शुरू कर देते हैं। इस समस्या का समाधान है मोनोरिपॉजिटरी (monorepo)। इस लेख में, हम समझेंगे कि मोनोरिपॉजिटरी क्या है, JavaScript (Node.js) इकोसिस्टम में इसकी आवश्यकता क्यों है, और लोकप्रिय टूल की मदद से इसे कैसे सेट अप किया जाए। यह लेख शुरुआती डेवलपर्स के लिए है जो पहले से Node.js और npm की मूल बातों से परिचित हैं।
\n\nमोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?
\nमोनोरिपॉजिटरी कोड को व्यवस्थित करने का एक दृष्टिकोण है, जिसमें सभी प्रोजेक्ट, लाइब्रेरी और सेवाएँ एक ही रिपॉजिटरी (जैसे, GitHub पर) में संग्रहीत की जाती हैं। मल्टीरिपॉजिटरी (multirepo) के विपरीत, जहाँ प्रत्येक प्रोजेक्ट का अपना रिपॉजिटरी होता है, मोनोरिपॉजिटरी सब कुछ एक ही स्थान पर एकत्रित करता है।
\nमुख्य लाभ:
\n- \n
- एकीकृत संस्करण नियंत्रण: उन परिवर्तनों को प्रबंधित करना आसान है जो कई पैकेजों को प्रभावित करते हैं। \n
- कोड का पुन: उपयोग: सामान्य उपयोगिताएँ, प्रकार और कॉन्फ़िगरेशन पास में होते हैं और npm पर प्रकाशन की आवश्यकता नहीं होती है। \n
- रीफैक्टरिंग को सरल बनाना: एक पैकेज में परिवर्तन स्वचालित रूप से दूसरों के साथ परीक्षण किए जाते हैं। \n
- एकीकृत बिल्ड और परीक्षण: एक कमांड से सभी पैकेजों के लिए परीक्षण चलाए जा सकते हैं। \n
हालाँकि, मोनोरिपॉजिटरी के नुकसान भी हैं: यह बहुत बड़ा हो सकता है, और निर्भरता प्रबंधन जटिल हो सकता है। इन समस्याओं को हल करने के लिए विशेष उपकरण मौजूद हैं।
\n\nJavaScript में मोनोरिपॉजिटरी के साथ काम करने के लिए उपकरण
\nNode.js इकोसिस्टम में मोनोरिपॉजिटरी प्रबंधित करने के लिए कई लोकप्रिय उपकरण हैं। हम दो सबसे सामान्य उपकरणों पर विचार करेंगे: NPM Workspaces (npm में निर्मित) और Lerna।
\nNPM Workspaces
\nnpm संस्करण 7 से शुरू करके, workspaces के माध्यम से मोनोरिपॉजिटरी के लिए अंतर्निहित समर्थन आया। यह अतिरिक्त पैकेज स्थापित किए बिना कोड को व्यवस्थित करने का एक सरल और आसान तरीका है।
सेट अप करने के लिए, बस एक रूट package.json बनाएं और उसमें पैकेज वाले फ़ोल्डर निर्दिष्ट करें:
\n// package.json (रूट)\n{\n "name": "my-monorepo",\n "private": true,\n "workspaces": [\n "packages/*"\n ]\n}\n\nफिर फ़ोल्डर संरचना बनाएं:
\n\nmy-monorepo/\n├── package.json\n├── packages/\n│ ├── utils/\n│ │ ├── package.json\n│ │ └── index.js\n│ └── app/\n│ ├── package.json\n│ └── index.js\n\nअब, यदि पैकेज app, utils पर निर्भर है, तो आप बस इसे निर्भरता में निर्दिष्ट कर सकते हैं:
\n// packages/app/package.json\n{\n "name": "@my/app",\n "dependencies": {\n "@my/utils": "*"\n }\n}\n\nप्रोजेक्ट की रूट में npm install चलाने के बाद, npm पैकेजों के बीच सिम्बोलिक लिंक बनाएगा। इसका मतलब है कि आप दोनों पैकेजों को एक साथ विकसित कर सकते हैं, और utils में परिवर्तन तुरंत app में उपलब्ध होंगे।
Lerna
\nLerna एक अधिक शक्तिशाली उपकरण है, जिसका उपयोग अक्सर NPM Workspaces या Yarn Workspaces के साथ किया जाता है। यह पैकेज प्रकाशन, वर्जनिंग और सभी पैकेजों में कमांड निष्पादित करने की क्षमताएँ जोड़ता है।
\nLerna स्थापित करना:
\n\nnpm install -g lerna\n\nकॉन्फ़िगरेशन बनाना:
\n\nlerna init\n\nयह एक lerna.json फ़ाइल और एक बुनियादी संरचना बनाएगा। कॉन्फ़िगरेशन का उदाहरण:
\n// lerna.json\n{\n "version": "0.0.0",\n "packages": ["packages/*"],\n "npmClient": "npm"\n}\n\nLerna आपको सभी पैकेजों में कमांड चलाने की अनुमति देता है:
\n\nlerna run test\nlerna run build\n\nऔर पैकेज संस्करणों का प्रबंधन भी करता है