Da nicht nur wir solche "Probleme" haben, existiert ein Werkzeug namens Composer, welches wir jetzt auch nutzen. Hier definiert man einfach, was man neben seinem eigenen Code sonst noch so braucht, und Composer sorgt dafür, dass das alles vorhanden ist. Praktischerweise löst es dabei auch Abhängigkeiten auf, die vorausgesetzte Komponenten haben. Das heißt, wenn wir z.B. sagen, wir brauchen XYZ, und XYZ braucht wiederum A, dann kommt A automatisch auch mit. Und wenn A seinerseits B braucht... Und so weiter.
Alles, was man auf diese Weise an Voraussetzungen runterlädt, landet in einem Ordner "vendor", welcher in unserem derzeitigen Repository leer ist. Das soll auch so sein, wenn wir wollen ja nicht den Quellcode anderer duplizieren und dann bei uns aktuell halten. Das bedeutet allerdings auch, dass man sich nicht unser BC2 Repository von GitHub runterladen und das dann installieren kann, weil die ganzen Voraussetzungen fehlen. Für Entwickler sollte das normalerweise keine Hürde darstellen, da sie mit einem einfachen Aufruf von Composer alles runterladen können, was fehlt. "Normale Anwender" können alles Notwendige von unserer Homepage runterladen, denn natürlich werden wir nach wie vor fertige Bundles zur Verfügung stellen.
Nun haben wir aber noch Abhängigkeiten anderer Art: Die Engine läuft prinzipiell auch ohne Module, aber nicht umgekehrt. Andererseits können Module Änderungen erfahren, ohne dass es eine neue Version der Engine (des Core) gibt. Daher macht es Sinn, die Module außerhalb des Engine-Repositories in jeweils eigenen Repositories abzulegen. Letztlich könnte man die Engine ganz ohne Module installieren und alles, was man haben will, über denn Addons Katalog nachladen. Da das Anfänger überfordern kann - wer kann schon auf Anhieb beurteilen, ob er das Modul XY wirklich braucht -, könnte man in den Installer einbauen, dass er einen Basis-Satz an Modulen im Anschluß an die Engine-Installation herunterlädt und installiert.
Worauf ich hinaus will:
Repository "BC2_Engine"
https://github.com/BlackCatDevelopment/BC2_Engine
Dieses Repository würde nur die Engine, also die Verzeichnisse CAT und languages (und eventuell ein leeres temp) beinhalten. Das Unterverzeichnis CAT/vendor muss durch Aufruf von Composer gefüllt werden.
Module
Jedes (!) Modul hat ein eigenes Repository, wie es ja z.B. bei catGallery oder blackNews der Fall ist. Analog zu BC1 gibt es ein Katalog-Repository mit Informationen zu allen verfügbaren Modulen, welches die Basis für den Addons Katalog ist. Das gilt natürlich auch für Themes und Templates, sofern sie über den Addons Katalog installierbar sein sollen.
Installation
Der Installer verfügt bereits über zwei Varianten, nämlich "Einfach" und "Erweitert". Im einfachen Modus könnte der Installer hingehen und die sinnvollsten Module sowie ein Standard-Template und ein Backend-Theme aus den jeweiligen Repositories holen. Die dafür notwendigen Methoden sind in der Engine vorhanden. Einzige Voraussetzung ist, dass ein Zugriff auf GitHub existiert. Im erweiterten Modus könnte man dem Benutzer den Addons Katalog mit einer Vorauswahl anzeigen, so dass er auf Wunsch weitere oder alternative Module auswählen kann, die dann ebenfalls automatisch installiert werden.
Die Engine samt fertig gefülltem vendor-Ordner liegt dem Installer dann übrigens als ZIP bei, das heißt, kein "normaler Anwender" muss sich mit Composer rumschlagen.
Vorteile
Durch die saubere Trennung von "reinem Core" und "Zusatzkomponenten" ist es viel einfacher, Module, die wir normalerweise mitliefern (müssen), außerhalb des normalen Releasezyklus zu aktualisieren. Bisher müssen wir diese nämlich zweimal vorhalten, einmal innerhalb des Core-Repositories und einmal als getrenntes Modul.
Anwender, die sich mit Composer auskennen, können die vorausgesetzten Komponenten jederzeit auf eigene Faust aktualisieren. Das wird man in der Regel nicht auf Produktivsystemen tun, sondern nur in Entwicklungsumgebungen.
Zudem wird es auf diese Weise möglich, die Engine selbst über den gleichen Mechanismus zu aktualisieren.
Nachteile
Für nicht so Geübte wird der Wildwuchs an Repositories vielleicht etwas verwirrend sein. Allerdings ist GitHub ohnehin nicht die geeignete Quelle für "normale Anwender".
Liste der Repositories (fortlaufend)
- Engine (oder auch Core)
https://github.com/BlackCatDevelopment/BC2_Engine - Addons Katalog
https://github.com/BlackCatDevelopment/ ... onsCatalog - Backstrap Backend Theme
https://github.com/BlackCatDevelopment/ ... strapTheme - Installer
https://github.com/BlackCatDevelopment/BC2_Installer - Admin Tool Socialmedia
https://github.com/BlackCatDevelopment/BC2_Socialmedia - Admin Tool VisitorStatistics
https://github.com/BlackCatDevelopment/ ... Statistics - Dashboard
https://github.com/BlackCatDevelopment/ ... eDashboard