Magento2: Wie verwalte ich meine Module?

Nun habe ich doch angefangen mich etwas mit Magento 2 zu beschäftigen und habe auch direkt das Gefühl ich muss - im Vergleich zu einigen anderen - viele Wochen aufholen. Aktuell beschäftigt mich das Problem wie wir zukünftig unsere Projekte mit Magento 2 anlegen sollten.

In Magento 1 bin ich nämlich mit dem Workflow den wir aktuell nutzen sehr zufrieden:

  • Mittels composer werden alle externen Module nach vendor/ geladen
  • Ein Vendor Modul ist auch der Magento Core selbst
  • Mit einem kleinen Script (welches wir xlink nennen) "symlinken" wir nun den Magento Core nach htdocs
  • Danach erfolgen alle Vendor-Module per Modman - welche auch xlink verarbeitet werden
  • Falls xlink eine tgz findet entpackt es diese und erstellt Symlinks auf Basis der packages.xml

Damit haben wir nur eine composer.json und eine composer.lock im GIT Repo.  Es folgt noch die Module und Themes die genau nur ein Kunde verwenden möchte oder speziell für ihn angefertigt sind:

  • in local/$Modulname liegt ein Modul und eine modman-Datei
  • xlink verlinkt ebenfalls alles was in local/ direkt in den htdocs/ - natürlich mit Hilfe der modman

Symlinks waren toll weil ich so direkt im Repo arbeiten konnte. Quellcode ändern, in Magento testen, commiten und Bugfix pushen. Easy.

In Magento 2

Machen wir erst mal eine kleine Bestandsaufnahme für Magento 2.

  • In Magento 2 gibt es schon composer von Haus aus
  • Damit können Libs oder auch Magento-Module, Sprachen, Themes installiert werden
  • Alle Infos dazu stehen unter https://github.com/magento/magento-composer-installer im Readme.md
  • Die Default Strategie für Deployment ist "copy". Die Strategie "Symlink" sagt mir z.Z. folgendes: "Warning: Magento 2 is not tested with "symlink" deployment strategy. It may not function properly."

Mein Anforderungen

  1. Ich gerne wieder ein GiT-Repo das die Composer.json + Lock enthält UND zusätzlich die Dinge die ich nur für den Kunden brauche.
  2. Ich hätte gerne keine externen Abhängigkeiten die ich nicht betreue
Anforderung 1 gestaltet sich eigentlich, dank Composer als releativ einfach. Hoffe ich zumindest. Meine Idee besteht darin die Composer Hooks post-update-cmd und post-install-cmd dazu zu veranlassen alles was im Verzeichnis local/* liegt, unter der Beachtung der composer.json des Verzeichnisses, korrekt zu symlinken. Also Themes nach Themes, Module zu Modulen usw. Eventuell verwerfe ich aber auch die Composer.json Idee und übernehme beim symlinken 1:1 die Verzeichnis-Struktur.

Anforderung 2 gestaltet sich als recht komplex. Wenn ich keine externen Anforderungen möchte muss ich alle Libs die Magento selbst bereits benötigt umbiegen und in mein GIT portieren. Das wäre relativ magisch und sehr aufwendig. Hierzu habe ich aktuell noch keine Idee. Generell fühlt es sich aber doof an wenn ein ganzes Team nicht arbeiten kann weil z.B. GitHub gerade down ist und niemand einen Stand ziehen kann. Oder wenn selbiges kurz vor dem Go-Live passiert?

Vermutlich wird man in diesem Fall auch "einfach" den Source von einem anderen Projekt oder der Dev-Maschine kopieren können. Ich bin unschlüssig.

Deine Meinung!

Jetzt habe ich meine Gedanken soweit "ausgekotzt". Was denkt ihr? Ein Git-Repo je Kunde oder einfach mehrere? Für jedes Modul des Kunden ein eigenes Git-Repo damit das mit Composer toll klappt? Ist es den Verwaltungsaufwand los? Stelle ich mich, was die externen Abhängigkeiten angeht, nur an?

Update 07.06.15

Andere sind schon eine Ecke weiter und diskutieren unter Allow modules to live outside of app/code directory  selbes Problem. Allerdings gibt es schon einen Pull-Request zur Lösung :)


Ein Beitrag von Tobias Vogt
Tobias's avatar

Tobias Vogt arbeitet seit 2008 mit Magento und ist seit 2011 durch Magento zertifizierter Entwickler. Beschäftigt ist er bei der code-x GmbH, einer Agentur für Internet und Marketing aus Paderborn. Er gehört zum Gründer-Team der Webguys und ist seit November 2011 Bachelor of Science (Wirtschaftsinformatik). Sie erreichen Ihn per E-Mail unter tobi@webguys.de.

Alle Beiträge von Tobias

Dein Kommentar