Libraries per Composer dynamisch laden

  • App
    WoltLab Suite Core

    Was mir durch das ein oder andere Paket immer wieder auffällt ist, dass man aktuell das ein oder andere Composer-Paket doppelt und dreifach im WSC hat, weil man es aktuell via Paket mitliefern muss.

    Von daher fände ich (als Entwickler) es praktisch, wenn man ab frühestens WSC 6.0 in der package.xml oder per PIP benötigte Pakete automatisch via Composer installieren lassen könnte.

    • Official Post

    Hallo,

    Was mir durch das ein oder andere Paket immer wieder auffällt ist, dass man aktuell das ein oder andere Composer-Paket doppelt und dreifach im WSC hat, weil man es aktuell via Paket mitliefern muss.

    beziehst du dich hier auf Duplikate zwischen eigenem Paket und WoltLab Suite Core (bspw. die PSR-Interfaces oder Guzzle) oder Duplikate zwischen separaten Third-Party-Paketen (bspw. DomPDF)?

  • Sowohl als auch. Guzzle und PSR waren jetzt auch die ersten Baustellen, an die ich gedacht habe. DomPDF wäre damit vermutlich auch einfacher zu aktualisieren, wobei VieCode dort irgendwas händisch angepasst hat, wenn ich mich nicht irre. Das würde auch das ein oder andere "Entwickler-Paket" obsolet machen, weil das einfach dynamisch erledigt wird und man nicht auf überschneidende Pfade aufpassen oder Pakete anderer Entwickler nutzen muss. Letzteres ist für mich persönlich aktuell weniger das Problem, da ich den Entwicklern vertraue, deren Pakete ich nutze und weiß, dass die Pakete Bestand haben werden.


    Als Knackpunkt sehe ich hier das Versionsmanagement, wenn Paket A Guzzle 5.0 will, Paket B aber 5.1.

    • Official Post

    Hallo,

    Guzzle und PSR waren jetzt auch die ersten Baustellen, an die ich gedacht habe.

    das kannst du verhältnismäßig einfach lösen (Ausschnitt aus unserem WebAuthn-Paket für 5.5):

    Die "replace":-Sektion sorgt dafür, dass diese Pakete nicht mit installiert werden. Generiert ist das mit jq '.packages | map({ (.name) : (.version) }) |add' < composer.lock.

    Als Knackpunkt sehe ich hier das Versionsmanagement, wenn Paket A Guzzle 5.0 will, Paket B aber 5.1.

    Zum Einen das, wobei das zumindest bei den Minor-Versionen noch nicht so schlimm ist. Es ist aber vor allem undefiniert, welche Version installiert wird, da die Entscheidung zum Zeitpunkt der Installation passiert und nicht zum Zeitpunkt der Entwicklung. Das ist kaum zu Testen, gerade da die genauen Versionen auch noch von anderen installierten Paketen abhängig und auch von der PHP-Version, die auf dem System läuft. Ich habe in der Vergangenheit schon häufiger Situationen gehabt, bei denen der Abhängigkeitsgraph einfach kaputt war, weil die Anforderungen widersprüchlich waren.


    Im WebAuthn-Paket haben wir beispielsweise aktuell die Situation, dass:

    • Paket A in der mit PHP 7.2 kompatiblen Version benötigt offiziell Paket B in Version 0.8.x
    • Paket B ist erst ab Version 0.9.x mit PHP 8.1 kompatibel.
    • Die Version von Paket A, die offiziell mit Version 0.9.x von B kompatibel ist, ist nicht mehr mit PHP 7.2 kompatibel.

    Technisch ist B in 0.9.x aber API-kompatibel mit 0.8.x, sodass ich composer so konfigurieren konnte, dass der Version 0.9.x installiert, aber für die Auflösung der Abhängigkeiten vorgibt, dass es Version 0.8.x wäre.


    Zum anderen stellt Composer natürlich auch Anforderungen an das System, die ein handelsüblicher Webspace nicht wirklich leisten kann. Der SAT-Solver benötigt bei komplexen Abhängigkeiten recht viel Arbeitsspeicher, Pakete können potentiell aus einem git installiert werden, composer dokumentiert (meines Wissens) keine API zur automatischen Verwendung.


    Summa summarum können wir den Vorschlag hier vermutlich auf „Nicht geplant“ setzen.

  • composer dokumentiert (meines Wissens) keine API zur automatischen Verwendung.

    Darf man kurz fragen, wie genau die "automatische Verwendung" gemeint ist?
    Oder bezieht sich das auf die Aussage mit Paketen über Git?

    Projekte:

    XIVDATA - Eorzea Database


    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...


    • Official Post

    Hallo,


    wie schon zuvor angedeutet, sehen wir das technisch nicht als praktikabel an. Im Rahmen der Plugin-Store-Prüfung habe ich jetzt auch schon bei mehreren (Entwickler-)Paketen auf die "replace"-Sektion in der composer.json hingewiesen, um Duplikate zu vermeiden und allgemein liefern wir mit WoltLab Suite Core mittlerweile auch eine ganze Reihe an allgemein nützlichen Bibliotheken mit.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!