PHP के साथ मोनोरिपॉजिटरी: स्केलेबल प्रोजेक्ट्स के लिए कोड संगठन
आधुनिक PHP-डेवलपमेंट में, प्रोजेक्ट के बढ़ने के साथ कोड प्रबंधन महत्वपूर्ण हो जाता है। कई अलग-अलग रिपॉजिटरी (पॉलीरिपॉजिटरी) का पारंपरिक दृष्टिकोण अक्सर सिंक्रोनाइज़ेशन समस्याओं, निर्भरताओं के दोहराव और रिफैक्टरिंग में कठिनाइयों का कारण बनता है। विकल्प — मोनोरिपॉजिटरी (Monorepo) है, जहां लाइब्रेरी, उपयोगिताएँ और एप्लिकेशन सहित सभी कोड एक ही Git-रिपॉजिटरी में संग्रहीत होते हैं। इस लेख में, हम Composer, Git और आधुनिक उपकरणों का उपयोग करके PHP पर मोनोरिपॉजिटरी को व्यवस्थित करने का तरीका समझेंगे।
मोनोरिपॉजिटरी क्या है और PHP में इसकी आवश्यकता क्यों है?
मोनोरिपॉजिटरी एक एकल रिपॉजिटरी है जिसमें कई प्रोजेक्ट, पैकेज या मॉड्यूल होते हैं जो तार्किक रूप से संबंधित हो सकते हैं। PHP डेवलपर के लिए, इसका मतलब है कि फ्रेमवर्क का कोर, API-सर्विस, एडमिन पैनल और सामान्य लाइब्रेरी एक ही फ़ोल्डर में होते हैं।
मोनोरिपॉजिटरी के लाभ:
- एकीकृत वर्ज़निंग: सभी परिवर्तन परमाणु रूप से कमिट होते हैं — लाइब्रेरी में सुधार के साथ उस कोड का अपडेट भी आता है जो इसका उपयोग करता है।
- रिफैक्टरिंग को सरल बनाना: आप पैकेज का इंटरफ़ेस बदल सकते हैं और एक ही pull request के अंतर्गत सभी निर्भरताओं को तुरंत अपडेट कर सकते हैं।
- उपकरणों का मानकीकरण: रूट के लिए एक
composer.jsonफ़ाइल, लिंटिंग और परीक्षण के एकीकृत नियम। - दोहराव में कमी: सामान्य कोड (जैसे, DTO, हेल्पर) को Packagist पर प्रकाशित करने की आवश्यकता नहीं है — यह सीधे उपलब्ध है।
हालाँकि, मोनोरिपॉजिटरी में अनुशासन की आवश्यकता होती है: स्पष्ट संरचना के बिना यह 'कबाड़खाना' बन जाता है। सफलता की कुंजी Composer autoload और Git-सबमॉड्यूल या monorepo-builder जैसे विशेष उपकरणों के साथ उचित संगठन है।
PHP पर मोनोरिपॉजिटरी की संरचना
PHP प्रोजेक्ट के लिए एक सामान्य संरचना पर विचार करें, जहां कई लाइब्रेरी और एक एप्लिकेशन हों। रूट डायरेक्टरी इस प्रकार दिखती है:
my-monorepo/├── packages/│ ├── core/ # बेस लाइब्रेरी (कोर)│ │ ├── src/│ │ │ └── CoreClass.php│ │ └── composer.json│ ├── logger/ # लॉगिंग│ │ ├── src/│ │ └── composer.json│ └── api/ # API-पैकेज (एक अलग एप्लिकेशन हो सकता है)│ ├── src/│ │ └── Controllers/│ └── composer.json├── apps/│ └── web/ # वेब एप्लिकेशन (Laravel/Symfony)│ ├── public/│ ├── src/│ └── composer.json├── composer.json # रूट composer.json (मेटा-पैकेज)├── phpunit.xml.dist└── .gitignoreसंगठन के सिद्धांत:
- सभी पैकेज
packages/में हैं। प्रत्येक पैकेज का अपनाcomposer.jsonएक अद्वितीय नाम के साथ है (उदाहरण,mycompany/core)। - एप्लिकेशन (फ्रंट, एडमिन, API)
apps/में हैं। वेpackages/के पैकेज को स्थानीय निर्भरता के रूप में उपयोग कर सकते हैं। - रूट
composer.jsonवैश्विक कॉन्फ़िगरेशन (autoload, स्क्रिप्ट) के लिए कार्य करता है।
मोनोरिपॉजिटरी के साथ काम करने के लिए Composer सेटअप
PHP ऑटोलोडिंग को Packagist पर पैकेज प्रकाशित किए बिना काम करने के लिए, हम path-रिपॉजिटरी का उपयोग करते हैं। रूट composer.json में निम्नलिखित ब्लॉक जोड़ें:
{ "name": "mycompany/monorepo", "require": { "mycompany/core": "*", "mycompany/logger": "*" }, "repositories": [ { "type": "path", "url": "packages/*" } ], "autoload": { "psr-4": { "MyCompany\\\\": "packages/" } }, "scripts": { "test": "phpunit" }}अब composer install चलाने पर, Comp