TypeScript के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन
\n\nआधुनिक वेब डेवलपमेंट में, विशेष रूप से TypeScript के साथ काम करते समय, डेवलपर्स अक्सर एक दुविधा का सामना करते हैं: सभी कोड को एक रिपॉजिटरी (मोनोरिपॉजिटरी) में रखें या इसे कई छोटे रिपॉजिटरी (पॉलीरिपॉजिटरी) में विभाजित करें। मध्यम और बड़ी परियोजनाओं के लिए, जहां कोड पुन: उपयोग और एकीकृत कॉन्फ़िगरेशन महत्वपूर्ण है, मोनोरिपॉजिटरी डी-फैक्टो मानक बन जाता है। इस लेख में, हम विश्लेषण करेंगे कि TypeScript पर मोनोरिपॉजिटरी को ठीक से कैसे व्यवस्थित किया जाए, बुनियादी संरचना से शुरू करके उन्नत तकनीकों तक।
\n\nमोनोरिपॉजिटरी क्या है और इसकी आवश्यकता क्यों है?
\n\nमोनोरिपॉजिटरी एक दृष्टिकोण है जिसमें कई परियोजनाओं (पैकेज, लाइब्रेरी, एप्लिकेशन) का कोड एक ही रिपॉजिटरी में संग्रहीत किया जाता है। TypeScript के संदर्भ में, यह विशेष रूप से सुविधाजनक है, क्योंकि यह अनुमति देता है:
\n\n- \n
- प्रकार और इंटरफेस का पुन: उपयोग सिस्टम के विभिन्न भागों के बीच npm में प्रकाशित किए बिना। \n
- रीफैक्टरिंग को सरल बनाना: एक पैकेज में परिवर्तन स्वचालित रूप से सभी आश्रितों में मान्य हो जाता है। \n
- लिंटर, फॉर्मेटर और बिल्डर के लिए एकीकृत कॉन्फ़िगरेशन रखना। \n
- CI/CD को सरल बनाना: एक रिपॉजिटरी — एक पाइपलाइन। \n
TypeScript में मोनोरिपॉजिटरी के साथ काम करने के लिए लोकप्रिय टूल में Nx, Turborepo और npm/yarn/pnpm workspaces शामिल हैं। हम pnpm workspaces और TypeScript Project References के उपयोग के दृष्टिकोण पर विचार करेंगे, क्योंकि यह एक न्यूनतम और लचीला सेट है।
\n\nमोनोरिपॉजिटरी की संरचना: बुनियादी सेटअप
\n\nआइए TypeScript प्रोजेक्ट के लिए एक विशिष्ट मोनोरिपॉजिटरी संरचना बनाएं। मान लीजिए कि हमारे पास तीन पैकेज हैं: core (सामान्य प्रकार और उपयोगिताएँ), server (बैकएंड) और web (फ्रंटएंड)।
1. रूट कॉन्फ़िगरेशन
\n\nप्रोजेक्ट की जड़ से शुरू करें। workspace के साथ एक package.json फ़ाइल बनाएं:
{\n "name": "my-monorepo",\n "private": true,\n "workspaces": [\n "packages/*"\n ],\n "scripts": {\n "build": "tsc -b",\n "clean": "tsc -b --clean",\n "lint": "eslint packages/*/src"\n }\n}\n\n\nफिर रूट tsconfig.json सेट करें। Project References का उपयोग करें — यह मोनोरिपॉजिटरी के लिए TypeScript की एक प्रमुख विशेषता है:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "strict": true,\n "composite": true,\n "declaration": true,\n "declarationMap": true,\n "sourceMap": true,\n "outDir": "./dist",\n "rootDir": ".",\n "skipLibCheck": true\n },\n "references": [\n { "path": "./packages/core" },\n { "path": "./packages/server" },\n { "path": "./packages/web" }\n ]\n}\n\n\nमहत्वपूर्ण: उन पैकेजों के लिए composite: true विकल्प अनिवार्य है जिनका अन्य पैकेज संदर्भ देते हैं। यह इंक्रीमेंटल बिल्ड और .d.ts फ़ाइलों की पीढ़ी को सक्षम करता है।
2. core पैकेज का सेटअप
\n\npackages/core पर जाएं। package.json बनाएं:
{\n "name": "@my/core",\n "version": "1.0.0",\n "main": "dist/index.js",\n "types": "dist/index.d.ts",\n "scripts": {\n "build": "tsc -b"\n }\n}\n\n\nऔर इस पैकेज के लिए tsconfig.json:
{\n "extends": "../../tsconfig.json",\n "compilerOptions": {\n "outDir": "./dist",\n "rootDir": "./src"\n },\n "include": ["src"]\n}\n\n\nएक सरल मॉड्यूल src/index.ts बनाएं:
export interface User {\n id: string;\n name: string;\n email: string;\n}\n\nexport function greet(user: User): string {\n return `Hello, ${user.name}!`;\n}\n\n\nअब पैकेज
ब्लॉग
पुस्तक अनुशंसाएँ
यह भी पढ़ें