परिचय: मोनोरेपॉजिटरी क्या है और PHP डेवलपर को इसकी आवश्यकता क्यों है?
बड़े PHP प्रोजेक्ट्स के विकास में अक्सर कोड संगठन की समस्या का सामना करना पड़ता है। प्रत्येक घटक (लाइब्रेरी, माइक्रोसर्विसेज, फ्रंटएंड) के लिए अलग-अलग रिपॉजिटरी का क्लासिकल दृष्टिकोण विखंडन, निर्भरताओं के दोहराव और रिफैक्टरिंग में कठिनाइयों की ओर ले जाता है। इसका विकल्प मोनोरेपॉजिटरी है - एक एकल रिपॉजिटरी जिसमें सभी संबंधित प्रोजेक्ट और पैकेज शामिल होते हैं।
इस लेख में हम व्यवहार में PHP प्रोजेक्ट के लिए मोनोरेपॉजिटरी को व्यवस्थित करने का तरीका समझेंगे। आप सीखेंगे कि Composer को कैसे सेटअप करें, फ़ोल्डर्स को कैसे संरचित करें, निर्भरताओं का प्रबंधन कैसे करें और CI/CD को कैसे व्यवस्थित करें। यह लेख मध्य स्तर के PHP डेवलपर्स के लिए है जो Git और Composer की मूल बातों से परिचित हैं।
मोनोरेपॉजिटरी के मुख्य लाभ:
- परिवर्तनों का एकीकृत इतिहास और परमाणु कमिट
- सामान्य निर्भरताओं के रिफैक्टरिंग में सरलता
- एकीकृत उपकरण और कॉन्फ़िगरेशन
- एकल पाइपलाइन के माध्यम से CI/CD का सरलीकरण
मोनोरेपॉजिटरी की संरचना: सही आर्किटेक्चर चुनना
सफल मोनोरेपॉजिटरी का मुख्य तत्व एक सुविचारित फ़ोल्डर संरचना है। PHP प्रोजेक्ट्स के लिए हम निम्नलिखित टेम्पलेट की सलाह देते हैं, जो पैकेज और एप्लिकेशन में विभाजन पर आधारित है:
monorepo/├── apps/ # तैयार एप्लिकेशन (वेबसाइटें, API, कंसोल स्क्रिप्ट)│ ├── api/ # Slim या Laravel पर REST API│ │ ├── public/│ │ ├── src/│ │ └── composer.json│ └── admin/ # एडमिन पैनल│ ├── public/│ ├── src/│ └── composer.json├── packages/ # पुन: प्रयोज्य PHP पैकेज (लाइब्रेरी)│ ├── core/ # सिस्टम का कोर: बेस क्लासेस, अपवाद│ │ ├── src/│ │ └── composer.json│ ├── users/ # उपयोगकर्ता प्रबंधन के लिए पैकेज│ │ ├── src/│ │ └── composer.json│ └── payments/ # भुगतान पैकेज│ ├── src/│ └── composer.json├── tools/ # बिल्ड और सहायक स्क्रिप्ट├── tests/ # पूरे प्रोजेक्ट के लिए इंटीग्रेशन और E2E टेस्ट├── composer.json # रूट मेनिफेस्ट (आमतौर पर "type": "project")├── composer.lock├── phpstan.neon├── phpunit.xml.dist└── .gitignorepackages/ में प्रत्येक पैकेज अपने स्वयं के composer.json के साथ एक स्वतंत्र Composer लाइब्रेरी है। apps/ में एप्लिकेशन इन पैकेजों को स्थानीय निर्भरता के रूप में जोड़ते हैं। ऐसी संरचना अनुमति देती है:
- तर्क को अलग करना और पैकेजों का स्वतंत्र रूप से परीक्षण करना
- सख्त टाइपिंग और PSR-4 ऑटोलोडिंग का उपयोग करना
- बिना कॉपी किए विभिन्न एप्लिकेशन के बीच कोड का पुन: उपयोग करना
मोनोरेपॉजिटरी के साथ काम करने के लिए Composer सेटअप
Composer PHP में निर्भरता प्रबंधन का मुख्य उपकरण है। मोनोरेपॉजिटरी के साथ काम करने के लिए हम दो मुख्य तंत्रों का उपयोग करते हैं: स्थानीय पथ (path) और रूट मेनिफेस्ट।
चरण 1: रूट composer.json
प्रोजेक्ट की जड़ में हम एक न्यूनतम मेनिफेस्ट बनाते हैं जो परिभाषित करता है कि यह एक मोनोरेपॉजिटरी है:
{ "name": "mycompany/monorepo", "type": "project", "require": { "php": "^8.1" }, "autoload": { "psr-4": { "MyCompany\\\\": "packages/" } }, "scripts": { "test": "phpunit", "phpstan": "phpstan analyse" }}चरण 2: पैकेजों में स्थानीय निर्भरताएँ
packages/users/ में प्रत्येक पैकेज का अपना composer.json होना चाहिए। उदाहरण:
{ "name": "mycompany/users", "type": "library", "require": { "php": "^8.1", "mycompany/core": "*" }, "autoload": { "psr-4": { "MyCompany\\\\Users\\\\": "src/" } }}