TypeScript के साथ मोनोरेपॉजिटरी का परिचय
आधुनिक वेब एप्लिकेशन की बढ़ती जटिलता के साथ, डेवलपर्स को कोड प्रबंधन की समस्या का सामना करना पड़ता है। जब कोई प्रोजेक्ट कई परस्पर जुड़े मॉड्यूल - फ्रंटएंड, बैकएंड, सामान्य प्रयोजन लाइब्रेरी - से बना होता है, तो अलग-अलग रिपॉजिटरी (polyrepo) वाला पारंपरिक दृष्टिकोण कोड डुप्लिकेशन, वर्जन डीसिंक्रोनाइज़ेशन और रिफैक्टरिंग में कठिनाइयों का कारण बन सकता है।
मोनोरेपॉजिटरी (monorepo) एक ऐसी रणनीति है जिसमें कई प्रोजेक्ट्स का कोड एक ही रिपॉजिटरी में संग्रहीत किया जाता है। TypeScript के साथ संयोजन में, मोनोरेपॉजिटरी एक शक्तिशाली उपकरण बन जाता है: सख्त टाइपिंग पूरे स्टैक में परिवर्तनों की सुरक्षा सुनिश्चित करती है, और एक एकीकृत बिल्ड सिस्टम निर्भरता प्रबंधन को सरल बनाता है।
इस लेख में, हम TypeScript के साथ मोनोरेपॉजिटरी को व्यवस्थित करने का तरीका देखेंगे: मूल संरचना से लेकर Nx और Turborepo जैसे उन्नत टूल तक।
TypeScript प्रोजेक्ट्स के लिए मोनोरेपॉजिटरी के लाभ
अभ्यास में जाने से पहले, आइए समझते हैं कि मोनोरेपॉजिटरी TypeScript प्रोजेक्ट्स के लिए विशेष रूप से लाभदायक क्यों है:
- एकीकृत टाइपिंग — TypeScript बिना डुप्लिकेशन के पैकेजों के बीच इंटरफेस और टाइप्स को पुन: उपयोग करने की अनुमति देता है।
- परमाणु कमिट — API और उसके उपभोक्ताओं में परिवर्तन एक ही कमिट में किए जा सकते हैं, जिससे समीक्षा और रोलबैक सरल हो जाता है।
- सरलीकृत रिफैक्टरिंग — IDE (जैसे, VS Code) पूरे रिपॉजिटरी में फ़ाइलों के नाम बदलने और स्थानांतरित करने को सही ढंग से संभालता है।
- बिल्ड कैशिंग — Nx जैसे उपकरण संकलन परिणामों को कैश करते हैं, जिससे CI/CD तेज़ होता है।
मोनोरेपॉजिटरी की मूल संरचना
आइए एक सरल लेकिन प्रभावी संरचना से शुरू करें। हम एक रूट प्रोजेक्ट और कई पैकेज बनाएंगे:
my-monorepo/├── packages/│ ├── shared/ # सामान्य प्रकार और उपयोगिताएँ│ │ ├── src/│ │ ├── package.json│ │ └── tsconfig.json│ ├── server/ # बैकएंड (उदाहरण के लिए, Express)│ │ ├── src/│ │ ├── package.json│ │ └── tsconfig.json│ └── web/ # फ्रंटएंड (React)│ ├── src/│ ├── package.json│ └── tsconfig.json├── package.json # रूट package.json├── tsconfig.base.json # सभी पैकेजों के लिए बेस tsconfig└── .gitignoreरूट package.json में workspace कॉन्फ़िगरेशन होना चाहिए। npm और Yarn के लिए यह इस प्रकार दिखता है:
{ "name": "my-monorepo", "private": true, "workspaces": [ "packages/*" ], "scripts": { "build": "tsc --build", "clean": "tsc --build --clean" }}बेस tsconfig.base.json सामान्य संकलन सेटिंग्स निर्धारित करता है:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "strict": true, "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "declaration": true, "declarationMap": true, "sourceMap": true, "composite": true }}प्रत्येक पैकेज बेस कॉन्फ़िग का विस्तार करता है:
{ "extends": "../../tsconfig.base.json", "compilerOptions": { "outDir": "./dist", "rootDir": "./src" }, "include": ["src"]}निर्भरता प्रबंधन और TypeScript paths
मोनोरेपॉजिटरी की प्रमुख समस्याओं में से एक पैकेजों के बीच इम्पोर्ट का सही कॉन्फ़िगरेशन है। पैकेजों को npm पर प्रकाशित करने के बजाय, हम TypeScript Project References और paths का उपयोग करते हैं।
Project References सेटअप
रूट tsconfig.json में प्रोजेक्ट्स के संदर्भ जोड़ें:
{ "files": [], "references": [ { "path": "./packages/shared" }, { "path": "./packages/server" }, { "path": "./packages/web" } ]}अब चलाने पर ```