PHP के साथ मोनोरेपॉजिटरी: कोड संगठन और सर्वोत्तम अभ्यास
आधुनिक PHP डेवलपमेंट में, कोड के प्रभावी संगठन का सवाल तेजी से महत्वपूर्ण होता जा रहा है। कई अलग-अलग रिपॉजिटरी (मल्टीरेपॉजिटरी) वाला पारंपरिक दृष्टिकोण अपनी कमियाँ रखता है: संस्करणों के सिंक्रोनाइज़ेशन में जटिलता, कॉन्फ़िगरेशन का दोहराव और रीफैक्टरिंग में समस्याएँ। इसका विकल्प मोनोरेपॉजिटरी (monorepo) है — एक ऐसी रणनीति जिसमें सभी संबंधित प्रोजेक्ट, पैकेज और लाइब्रेरी एक ही रिपॉजिटरी में संग्रहीत होते हैं। इस लेख में, हम समझेंगे कि PHP के साथ मोनोरेपॉजिटरी कैसे व्यवस्थित करें, किन टूल्स का उपयोग करें और किन संभावित नुकसानों पर ध्यान दें।
मोनोरेपॉजिटरी क्या है और PHP प्रोजेक्ट्स को इसकी आवश्यकता क्यों है?
मोनोरेपॉजिटरी एक एकल कोड भंडार है जिसमें कई प्रोजेक्ट या पैकेज शामिल होते हैं। PHP की दुनिया में एक उत्कृष्ट उदाहरण Laravel है, जिसमें फ्रेमवर्क, ऑथेंटिकेशन, क्यू, मेल और अन्य घटकों के पैकेज एक ही रिपॉजिटरी में शामिल हैं।
PHP प्रोजेक्ट्स के लिए मुख्य लाभ:
- रीफैक्टरिंग को सरल बनाना — एक पैकेज में किए गए बदलाव तुरंत सभी आश्रित घटकों को दिखाई देते हैं, प्रत्येक पैकेज के संस्करण को अलग-अलग प्रकाशित और अपडेट करने की आवश्यकता नहीं होती।
- संस्करणों की अखंडता — सभी पैकेज निर्भरताओं के एक ही संस्करण का उपयोग करते हैं, जो प्रकार के विरोध को समाप्त करता है।
- एकीकृत CI/CD — सभी घटकों के लिए एक ही बिल्ड पाइपलाइन, क्रॉस-पैकेज परिवर्तनों के परीक्षण को सरल बनाता है।
- सहयोग में सुधार — डेवलपर्स पूरे प्रोजेक्ट का कोड देखते हैं, कोड रिव्यू करना और कोडिंग के एकसमान मानकों को बनाए रखना आसान होता है।
हालाँकि, मोनोरेपॉजिटरी सभी के लिए उपयुक्त नहीं है। यदि आपके प्रोजेक्ट शिथिल रूप से जुड़े हुए हैं या उनके रिलीज़ चक्र अलग-अलग हैं, तो मल्टीरेपॉजिटरी अधिक सुविधाजनक हो सकता है। घटकों के घनिष्ठ एकीकरण वाले मध्यम और बड़े PHP प्रोजेक्ट्स के लिए, मोनोरेपॉजिटरी अक्सर सबसे अच्छा विकल्प बन जाता है।
PHP पर मोनोरेपॉजिटरी की संरचना
सही संरचना एक सफल मोनोरेपॉजिटरी का आधार है। आइए एक कोर (core), कई मॉड्यूल और परीक्षणों वाले प्रोजेक्ट के उदाहरण पर एक विशिष्ट संगठन पर विचार करें।
my-php-monorepo/├── packages/│ ├── core/│ │ ├── src/│ │ │ └── CoreService.php│ │ ├── tests/│ │ └── composer.json│ ├── module-auth/│ │ ├── src/│ │ ├── tests/│ │ └── composer.json│ └── module-payment/│ ├── src/│ ├── tests/│ └── composer.json├── apps/│ ├── api/│ │ ├── public/│ │ ├── src/│ │ └── composer.json│ └── console/│ ├── src/│ └── composer.json├── tests/│ └── IntegrationTest.php├── composer.json (रूट)├── phpunit.xml.dist├── .gitignore└── README.mdसंगठन के प्रमुख सिद्धांत:
- पैकेजों में विभाजन (packages) — प्रत्येक पैकेज का अपना
composer.jsonहोता है जिसमें नाम, ऑटोलोडिंग और निर्भरताएँ होती हैं। - एप्लिकेशन (apps) — एंट्री पॉइंट (API, कंसोल कमांड) जो पैकेजों को एक साथ जोड़ते हैं।
- रूट composer.json — इसमें मोनोरेपॉजिटरी के साथ काम करने के लिए मेटा-कॉन्फ़िगरेशन होता है।
रूट composer.json को कॉन्फ़िगर करना
मोनोरेपॉजिटरी के काम करने के लिए, रूट composer.json को इस प्रकार कॉन्फ़िगर करना आवश्यक है कि पैकेज Packagist पर प्रकाशित किए बिना स्थानीय रूप से उपलब्ध हों।
{ "name": "my-company/my-monorepo", "type": "project", "require": { "php": "^8.1", "my-company/core": "*", "my-company/module-auth": "*", "my-company/module-payment": "*" }, "autoload": { "psr-4": { "MyCompany\\\\": "packages/" } }, "repositories": [ { "type": "path", "url": "packages/*", "options": { "symlink": true } } ], "scripts": { "
```