Monorepository mit PHP: Code-Organisation für große Projekte

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Monorepository mit PHP: Code-Organisation für skalierbare Projekte



In der modernen PHP-Entwicklung wird die Code-Verwaltung mit dem Wachstum des Projekts kritisch. Der traditionelle Ansatz mit vielen separaten Repositories (Polyrepository) führt oft zu Synchronisationsproblemen, doppelten Abhängigkeiten und Schwierigkeiten beim Refactoring. Die Alternative ist ein Monorepository (Monorepo), bei dem der gesamte Code, einschließlich Bibliotheken, Utilities und Anwendungen, in einem einzigen Git-Repository gespeichert wird. In diesem Artikel werden wir untersuchen, wie man ein Monorepository in PHP mit Composer, Git und modernen Tools organisiert.



Was ist ein Monorepository und warum wird es in PHP benötigt?



Ein Monorepository ist ein einziges Repository, das mehrere Projekte, Pakete oder Module enthält, die logisch miteinander verbunden sein können. Für einen PHP-Entwickler bedeutet dies, dass sich der Framework-Kern, der API-Dienst, das Admin-Panel und gemeinsame Bibliotheken in einem Ordner befinden.



Vorteile eines Monorepositorys:

  • Einheitliche Versionierung: Alle Änderungen werden atomar committet – eine Korrektur in einer Bibliothek wird sofort von einer Aktualisierung des Codes begleitet, der sie verwendet.
  • Vereinfachtes Refactoring: Sie können die Schnittstelle eines Pakets ändern und sofort alle Abhängigkeiten im Rahmen eines einzigen Pull Requests aktualisieren.
  • Standardisierung der Tools: Eine einzige composer.json-Datei für das Root-Verzeichnis, einheitliche Linting- und Testregeln.
  • Reduzierung von Duplikaten: Gemeinsamer Code (z. B. DTOs, Helfer) muss nicht auf Packagist veröffentlicht werden – er ist direkt verfügbar.


Allerdings erfordert ein Monorepository Disziplin: Ohne eine klare Struktur wird es zu einer „Müllhalde“. Der Schlüssel zum Erfolg ist die richtige Organisation mit Composer Autoload und Git-Submodulen oder spezialisierten Tools wie monorepo-builder.



Struktur eines Monorepositorys in PHP



Betrachten wir eine typische Struktur für ein PHP-Projekt mit mehreren Bibliotheken und einer Anwendung. Das Root-Verzeichnis sieht so aus:



my-monorepo/├── packages/│   ├── core/                  # Basisbibliothek (Kern)│   │   ├── src/│   │   │   └── CoreClass.php│   │   └── composer.json│   ├── logger/                # Logging│   │   ├── src/│   │   └── composer.json│   └── api/                   # API-Paket (kann eine separate Anwendung sein)│       ├── src/│       │   └── Controllers/│       └── composer.json├── apps/│   └── web/                   # Web-Anwendung (Laravel/Symfony)│       ├── public/│       ├── src/│       └── composer.json├── composer.json              # Root composer.json (Meta-Paket)├── phpunit.xml.dist└── .gitignore


Organisationsprinzipien:

  • Alle Pakete befinden sich in packages/. Jedes Paket hat eine eigene composer.json mit einem eindeutigen Namen (z. B. mycompany/core).
  • Anwendungen (Frontend, Admin, API) liegen in apps/. Sie können Pakete aus packages/ als lokale Abhängigkeiten verwenden.
  • Die root composer.json dient der globalen Konfiguration (Autoload, Skripte).


Composer für die Arbeit mit einem Monorepository einrichten



Damit das PHP-Autoloading ohne Veröffentlichung der Pakete auf Packagist funktioniert, verwenden wir Path-Repositories. Fügen Sie den folgenden Block in die root composer.json ein:



{    "name": "mycompany/monorepo",    "require": {        "mycompany/core": "*",        "mycompany/logger": "*"    },    "repositories": [        {            "type": "path",            "url": "packages/*"        }    ],    "autoload": {        "psr-4": {            "MyCompany\\\\": "packages/"        }    },    "scripts": {        "test": "phpunit"    }}


Wenn Sie nun composer install ausführen, wird Comp

Blogs

Buchempfehlungen