जावास्क्रिप्ट के साथ मोनोरिपॉजिटरी: कोड का व्यावहारिक संगठन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट के साथ मोनोरिपॉजिटरी: कोड का व्यावहारिक संगठन

\n\n

जावास्क्रिप्ट (Node.js) में जटिल परियोजनाओं का विकास अक्सर कोड प्रबंधन की समस्या का सामना करता है। जब आपके पास कई पैकेज, लाइब्रेरी या माइक्रोसर्विसेज होते हैं, जिनमें से प्रत्येक अपने स्वयं के रिपॉजिटरी में रहता है, तो इससे कोड का दोहराव, संस्करणों के सिंक्रनाइज़ेशन में जटिलता और CI/CD में मंदी आती है। समाधान है — मोनोरिपॉजिटरी (monorepo)। इस लेख में, हम विश्लेषण करेंगे कि व्यवहार में जावास्क्रिप्ट के साथ मोनोरिपॉजिटरी कैसे व्यवस्थित करें: उपकरणों के चयन से लेकर बिल्ड और प्रकाशन के कॉन्फ़िगरेशन तक।

\n\n

मोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?

\n\n

मोनोरिपॉजिटरी कोड प्रबंधन का एक दृष्टिकोण है, जिसमें परियोजना के सभी पैकेज, लाइब्रेरी और एप्लिकेशन एक ही रिपॉजिटरी में संग्रहीत होते हैं। मल्टीरिपॉजिटरी (प्रत्येक पैकेज अपने स्वयं के रिपो में) के विपरीत, मोनोरिपॉजिटरी प्रदान करता है:

\n\n
    \n
  • एकीकृत परिवर्तन इतिहास: आसानी से ट्रैक करें कि एक भाग में परिवर्तन दूसरे को कैसे प्रभावित करता है।
  • \n
  • कोड का पुन: उपयोग: सामान्य उपयोगिताएँ और घटक npm में प्रकाशित किए बिना एक ही स्थान पर रहते हैं।
  • \n
  • सरलीकृत रिफैक्टरिंग: एक पैकेज के API में परिवर्तन तुरंत सभी आश्रितों में दिखाई देता है।
  • \n
  • एकीकृत CI/CD सेटिंग्स: सभी पैकेजों के लिए एक कॉन्फ़िगरेशन फ़ाइल।
  • \n
\n\n

जावास्क्रिप्ट (Node.js) के लिए, मोनोरिपॉजिटरी विशेष रूप से प्रासंगिक है, क्योंकि यह 'निर्भरता के भ्रम' से छुटकारा पाने और विकास को गति देने की अनुमति देता है। आइए व्यावहारिक कार्यान्वयन पर विचार करें।

\n\n

जावास्क्रिप्ट में मोनोरिपॉजिटरी के लिए उपकरण

\n\n

बाजार में कई लोकप्रिय उपकरण हैं। हम दो मुख्य पर विचार करेंगे: npm workspaces (npm में निर्मित) और Lerna (विस्तारित कार्यक्षमता)।

\n\n

1. npm workspaces (अंतर्निहित समर्थन)

\n\n

npm v7 से शुरू करके, पैकेज मैनेजर workspaces का समर्थन करता है। यह शुरू करने का सबसे आसान तरीका है। प्रोजेक्ट संरचना का उदाहरण:

\n\n
my-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\n
{\n  "name": "my-monorepo",\n  "private": true,\n  "workspaces": ["packages/*"]\n}
\n\n

अब packages/* में सभी पैकेज स्वचालित रूप से लिंक हो जाते हैं। निर्भरताएँ स्थापित करने के लिए, रूट में npm install चलाना पर्याप्त है। पैकेजों के बीच निर्भरताएँ मानक रूप से इंगित की जाती हैं:

\n\n
// packages/app/package.json\n{\n  "name": "@my/app",\n  "dependencies": {\n    "@my/core": "*",\n    "@my/utils": "*"\n  }\n}
\n\n

npm workspaces node_modules फ़ोल्डर में सिमलिंक बनाता है, इसलिए इम्पोर्ट सामान्य पैकेजों की तरह काम करते हैं।

\n\n

2. Lerna (उन्नत प्रबंधन)

\n\n

Lerna प्रकाशन, संस्करण और समानांतर में स्क्रिप्ट निष्पादित करने की क्षमता वाला मोनोरिपॉजिटरी प्रबंधन के लिए एक उपकरण है। स्थापना:

\n\n
npm install --global lerna
\n\n

प्रोजेक्ट में आरंभीकरण:

\n\n
lerna init
\n\n

फ़ाइल lerna.json:

\n\n
{\n  "version": "independent",\n  "npmClient": "npm",\n  "packages": ["packages/*"]\n}
\n\n

independent मोड प्रत्येक पैकेज को अपना स्वयं का संस्करण रखने की अनुमति देता है। मुख्य कमांड:

\n\n
    \n
  • lerna bootstrap — निर्भरताएँ स्थापित करता है और पैकेजों को लिंक करता है।
  • \n
  • lerna run build — सभी पैकेजों में build स्क्रिप्ट निष्पादित करता है।
  • \n
  • lerna publish — संशोधित पैकेजों को npm में प्रकाशित करता है।
  • \n
\n\n

कोड का व्यावहारिक संगठन

\n\n

आइए Node.js पर बैकएंड और सामान्य उपयोगिताओं के साथ वेब एप्लिकेशन के लिए मोनोरिपॉजिटरी सेट करने के एक उदाहरण पर विचार करें।

\n\n

चरण 1: मूल संरचना

\n\n

हम तीन पैकेज बनाएंगे:

\n\n

ब्लॉग

पुस्तक अनुशंसाएँ