Abhängigkeitsverwaltung mit Composer
Diese Seite richtet sich an Ingenieure, die Abhängigkeiten einer Exponential-Installation hinzufügen, aktualisieren oder prüfen, oder die ein Paket pflegen, das das Hauptprojekt verlangt. Der Standard ist Standards für PHP, PHP-FIG und Composer.
Inhalt
- Das Hauptpaket
- Erweiterungen sind Pakete
- Bedingungen und die Lock-Datei
- In der richtigen Reihenfolge neu festlegen
- Entwicklungswerkzeuge
- Klone statt Archiven
- PSR-Stand
- Checkliste für eine neue Abhängigkeit
Das Hauptpaket
| Feld | Wert |
|---|---|
name | se7enxweb/exponential |
type | ezpublish-legacy (der Typ, den das Legacy-Installer-Plugin versteht) |
license | GPL-2.0-or-later |
php | ^8.0 bis ^8.8 |
extra.branch-alias | "dev-main": "6.0.x-dev" |
config.allow-plugins | nur die Legacy-Installer-Plugins |
Exponential zu installieren bedeutet composer install im Hauptverzeichnis des Repositorys; das README sagt, dass die
Software ohne es nicht läuft.
Erweiterungen sind Pakete
Das require des Hauptprojekts listet die Erweiterungen, die jede Installation erhält, als Pakete se7enxweb/*, jede mit
einer Tilde-Bedingung, zum Beispiel se7enxweb/exponential-velocity in ~0.0.4.57 und
se7enxweb/sevenx_authentication_2fa in ~1.0.18. Das Legacy-Installer-Plugin legt sie in extension/ ab. suggest
listet optionale, etwa se7enxweb/sevenx_valkey_cache und se7enxweb/ezfind, mit den PHP-Erweiterungen, die jede
Datenbank braucht.
Bedingungen und die Lock-Datei
- Eine Tilde-Bedingung lässt nur die letzte Stelle frei:
~0.0.4.54nimmt0.0.4.55und später an, nie0.0.5.0. composer.lockwird nicht committet; jede Installation löst aus den Bedingungen auf. Der PHPUnit-Job der CI löst bei jedem Lauf frisch auf, ein Paket-Release kann also ein Ergebnis ohne Änderung im Repository verändern (CI-Gates).- Pakete, die
se7enxweb/exponentialmit einer Versionsbedingung verlangen, lösen über den Branch-Alias gegenmainauf, und die CI setzt für Pull-RequestsCOMPOSER_ROOT_VERSION=dev-main.
In der richtigen Reihenfolge neu festlegen
- Veröffentlichen Sie die Erweiterung (Release Engineering).
- Sehen Sie die neue Version auf Packagist. Ein Repository ohne den Packagist-Webhook bleibt bei einer alten Version, bis es von Hand aktualisiert wird.
- Committen Sie die neue Bedingung des Hauptprojekts.
- Führen Sie die Gates auf diesem Commit aus und pushen Sie ihn.
Ein Festlegen auf eine Version, die Packagist noch nicht listet, bricht den Installationsschritt jedes CI-Zweigs auf einmal; das Push-Gate lehnt es deshalb ab.
Entwicklungswerkzeuge
PHP_CodeSniffer, PHPCompatibility und PHPStan werden aus einer eigenen composer.dev.json mit make devtools nach
.devtools/ aufgelöst, für die Plattform PHP 8.0.30, nie nach vendor/. require-dev des Hauptprojekts enthält nur
PHPUnit und einen Code-Generator (Statische Analyse und Codestil).
Klone statt Archiven
Composer kann den Kernel und die Erweiterungen als Git-Klone statt als Archive installieren, sodass Sie sehen, was sich
geändert hat, eine Regression mit Bisect finden, eine Korrektur vor ihrer Veröffentlichung nutzen und Änderungen
zurückschicken können. Composer weigert sich, einen Klon mit nicht committeten oder nicht gepushten Änderungen zu
aktualisieren, aber ein Ordner, den Sie von Hand geklont haben, wo Composer ein Archiv installiert hatte, wird bei der
nächsten Aktualisierung ohne Rückfrage ersetzt; lassen Sie Composer den Klon mit composer reinstall <package> anlegen.
Aktualisieren Sie auf einer Live-Website ein Paket nach dem anderen (Mit Git entwickeln,
Mit Git aktualisieren).
PSR-Stand
Das Projekt sagt es klar: kein Autoloading nach PSR-4 (stattdessen erzeugte Klassenzuordnungen), keine Schnittstellen nach PSR-3, PSR-6, PSR-7, PSR-11, PSR-14, PSR-15 bis PSR-18 im Kernel und ein eigener Codestil statt PSR-12. Planen Sie Adapter ein, wenn Ihr System diese Schnittstellen erwartet.
Checkliste für eine neue Abhängigkeit
- To do: Wird sie gebraucht, oder erledigt das der Kernel oder eine mitgelieferte Erweiterung bereits?
- To do: Ihre Lizenz ist mit der GNU GPL, Version 2 oder später, vereinbar.
- To do: Sie unterstützt PHP 8.0 (die älteste unterstützte Version) und, wo möglich, PHP 7.4 (ohne Support nutzbar), oder sie ist optional und abgesichert, oder sie wird nur für neueres PHP über
se7enxweb/exponential-php-floorverlangt. - To do: Sie wird gepflegt und auf Packagist veröffentlicht.
- To do: Die Bedingung nennt eine veröffentlichte Version.
- To do: Ihre Sicherheitshinweise werden verfolgt (
composer auditempfiehlt die Anleitung zur Härtung).
Verwandte Seiten
- Composer und Packagist, für Anwendungsentwickler
- composer.json für Erweiterungen
- Composer und Git auf Servern
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.