PHP के साथ मोनोरिपॉजिटरी: व्यवहार में कोड का संगठन

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: PHP में मोनोरिपॉजिटरी क्यों?

\n

जटिल PHP एप्लिकेशन (CRM, SaaS, फ्रेमवर्क) विकसित करते समय अक्सर एक दुविधा होती है: सारा कोड एक रिपॉजिटरी (मोनोरिपॉजिटरी) में रखें या कई माइक्रोसर्विसेज और पैकेजों में विभाजित करें। PHP के साथ मोनोरिपॉजिटरी (monorepo) एक ऐसी रणनीति है जिसमें कई संबंधित प्रोजेक्ट (लाइब्रेरीज़, मॉड्यूल, एप्लिकेशन) एक ही Git रिपॉजिटरी में होते हैं।

\n

व्यवहार में यह प्रदान करता है:

\n
    \n
  • एकीकृत परिवर्तन इतिहास — यह ट्रैक करना आसान है कि एक पैकेज में बदलाव ने दूसरे को कैसे प्रभावित किया।
  • \n
  • सरलीकृत CI/CD सेटअप — सभी घटकों के निर्माण और परीक्षण के लिए एक पाइपलाइन।
  • \n
  • दोहराव में कमी — साझा कॉन्फ़िगरेशन, स्क्रिप्ट और निर्भरताएँ।
  • \n
  • तेज़ पुनरावृत्ति — स्थानीय परीक्षण के लिए Packagist पर पैकेज प्रकाशित करने की आवश्यकता नहीं है।
  • \n
\n

हालाँकि, मोनोरिपॉजिटरी में अनुशासन की आवश्यकता होती है। उचित कोड संगठन के बिना, यह एक 'स्पेगेटी-मोनोलिथ' में बदल जाता है। इस लेख में, हम मोनोरिपॉजिटरी में PHP प्रोजेक्ट को व्यवस्थित करने के व्यावहारिक चरणों पर चर्चा करेंगे।

\n\n

1. मोनोरिपॉजिटरी की निर्देशिका संरचना

\n

मुख्य सिद्धांत पैकेज और एप्लिकेशन में स्पष्ट विभाजन है। आइए एक सामान्य आर्किटेक्चर के उदाहरण पर विचार करें:

\n\n
project-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 लाइब्रेरी है। यह निर्भरताओं को अलग करने और उन्हें अलग-अलग परीक्षण करने की अनुमति देता है।

\n\n

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\n

2. Composer के माध्यम से निर्भरता प्रबंधन

\n

रूट composer.json मोनोरिपॉजिटरी का हृदय है। इसमें शामिल है:

\n
    \n
  • स्थानीय रूप से जुड़े सभी पैकेजों की सूची (path रिपॉजिटरी के माध्यम से)।
  • \n
  • पूरे प्रोजेक्ट के लिए Dev-निर्भरताएँ (PHPUnit, PHPStan, GrumPHP)।
  • \n
  • स्वचालन के लिए स्क्रिप्ट (स्टैटिक विश्लेषण, परीक्षण)।
  • \n
\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

ब्लॉग

पुस्तक अनुशंसाएँ