परिचय: PHP में मोनोरिपॉजिटरी क्यों?
\nजटिल PHP एप्लिकेशन (CRM, SaaS, फ्रेमवर्क) विकसित करते समय अक्सर एक दुविधा होती है: सारा कोड एक रिपॉजिटरी (मोनोरिपॉजिटरी) में रखें या कई माइक्रोसर्विसेज और पैकेजों में विभाजित करें। PHP के साथ मोनोरिपॉजिटरी (monorepo) एक ऐसी रणनीति है जिसमें कई संबंधित प्रोजेक्ट (लाइब्रेरीज़, मॉड्यूल, एप्लिकेशन) एक ही Git रिपॉजिटरी में होते हैं।
\nव्यवहार में यह प्रदान करता है:
\n- \n
- एकीकृत परिवर्तन इतिहास — यह ट्रैक करना आसान है कि एक पैकेज में बदलाव ने दूसरे को कैसे प्रभावित किया। \n
- सरलीकृत CI/CD सेटअप — सभी घटकों के निर्माण और परीक्षण के लिए एक पाइपलाइन। \n
- दोहराव में कमी — साझा कॉन्फ़िगरेशन, स्क्रिप्ट और निर्भरताएँ। \n
- तेज़ पुनरावृत्ति — स्थानीय परीक्षण के लिए Packagist पर पैकेज प्रकाशित करने की आवश्यकता नहीं है। \n
हालाँकि, मोनोरिपॉजिटरी में अनुशासन की आवश्यकता होती है। उचित कोड संगठन के बिना, यह एक 'स्पेगेटी-मोनोलिथ' में बदल जाता है। इस लेख में, हम मोनोरिपॉजिटरी में PHP प्रोजेक्ट को व्यवस्थित करने के व्यावहारिक चरणों पर चर्चा करेंगे।
\n\n1. मोनोरिपॉजिटरी की निर्देशिका संरचना
\nमुख्य सिद्धांत पैकेज और एप्लिकेशन में स्पष्ट विभाजन है। आइए एक सामान्य आर्किटेक्चर के उदाहरण पर विचार करें:
\n\nproject-root/\n├── apps/\n│ ├── web/ # वेब एप्लिकेशन (Symfony/Laravel)\n│ │ ├── public/\n│ │ ├── src/\n│ │ └── composer.json\n│ └── api/ # API एप्लिकेशन (Lumen/Slim)\n│ ├── public/\n│ ├── src/\n│ └── composer.json\n├── packages/\n│ ├── core/ # कोर (सामान्य इंटरफ़ेस, एंटिटीज़)\n│ │ ├── src/\n│ │ └── composer.json\n│ ├── billing/ # भुगतान मॉड्यूल\n│ │ ├── src/\n│ │ └── composer.json\n│ └── notifications/ # सूचना मॉड्यूल\n│ ├── src/\n│ └── composer.json\n├── tools/ # डेवलपमेंट स्क्रिप्ट (PHP-CS-Fixer, PHPStan)\n├── composer.json # रूट मेनिफेस्ट\n└── phpstan.neon # सामान्य विश्लेषण सेटिंग्स\n\nध्यान दें: packages/ में प्रत्येक पैकेज अपने स्वयं के composer.json के साथ एक पूर्ण Composer लाइब्रेरी है। यह निर्भरताओं को अलग करने और उन्हें अलग-अलग परीक्षण करने की अनुमति देता है।
core पैकेज के लिए composer.json का उदाहरण
\n{\n "name": "myproject/core",\n "type": "library",\n "autoload": {\n "psr-4": {\n "MyProject\\\\Core\\\\": "src/"\n }\n },\n "require": {\n "php": ">=8.1"\n },\n "extra": {\n "branch-alias": {\n "dev-main": "1.x-dev"\n }\n }\n}\n\n2. Composer के माध्यम से निर्भरता प्रबंधन
\nरूट composer.json मोनोरिपॉजिटरी का हृदय है। इसमें शामिल है:
- \n
- स्थानीय रूप से जुड़े सभी पैकेजों की सूची (
pathरिपॉजिटरी के माध्यम से)। \n - पूरे प्रोजेक्ट के लिए Dev-निर्भरताएँ (PHPUnit, PHPStan, GrumPHP)। \n
- स्वचालन के लिए स्क्रिप्ट (स्टैटिक विश्लेषण, परीक्षण)। \n
रूट composer.json का उदाहरण
\n{\n "name": "myproject/monorepo",\n "type": "project",\n "repositories": [\n {\n "type": "path",\n "url": "packages/*",\n "options": {\n "symlink": true\n }\n }\n ],\n "require": {\n "myproject/core": "@dev",\n "myproject/billing": "@dev",\n "myproject/notifications": "@dev"\n },\n "require-dev": {\n "phpunit/phpunit": "^10.0",\n "phpstan/phpstan": "^1.10",\n "friendsofphp/php-cs-fixer": "^3.0"\n },\n "autoload": {\n "psr-4": {\n "MyProject\\\\": "packages/*/src/"\n }\n },\n "scripts": {\n "test": "phpunit",\n "analyse": "phpstan analyse",\n "cs-fix": "php-cs-fixer fix"\n }\n}\n\nमुख्य बिंदु:
\n- \n
- symlink: true