How To : Composer mit lokalen Ordnern

mastercad
09.01.2016 22:32:50
Über die Jahre haben sich bei mir Unmengen an Klassen und Dateien angesammelt und wie es nunmal so ist: Ein neues Projekt, man braucht was von hier, was von da, also kopiert man es sich aus irgend einem Projekt mal eben in das neue hinein.

In einigen Projekten habe ich Teile angepasst, Bugs entfernt oder neue Sachen implementiert. Was das bringt ist klar, reines Chaos... Damit will ich schon ewig Schluß machen und habe bisher noch mit mir gerungen, wie ich die Lösung umsetze.

Ich entschied mich nun heute für Composer. Hinzu kommt nämlich, dass viele Dateien und Klassen gar nicht versioniert sind und nur so in Ordnern vorliegen, lokal. Das ist auch für Composer ein Sonderfall, aber durchaus umsetzbar.

Ausgangspunkt ist ein zentraler Ordner, in dem die Klassen und Dateien liegen und ein neues Projekt.

Sehen wir uns zu erst die composer.json des Source Ordners für den Logger Ordner an:


JSON code

  1. {
  2. "name": "cad/logger",
  3. "description": "CAD - Logger Klasse",
  4. "type": "dist",
  5. "license": "MIT",
  6. "authors": [
  7. {
  8.      "name": "Andreas Kempe",
  9.      "homepage": "http://www.byte-artist.de",
  10.      "email": "andreas.kempe@byte-artist.de",
  11.      "role": "Author"
  12. }
  13. ],
  14. "require": {
  15. "composer/installers": "~1.0"
  16. }
  17. }


Hier noch eine composer.json Beispiel für den Tool Ordner:


JSON code

  1. {
  2. "name": "cad/tools",
  3. "description": "CAD - Tool Klassen",
  4. "type": "zend-library",
  5. "license": "MIT",
  6. "authors": [
  7. {
  8.      "name": "Andreas Kempe",
  9.      "homepage": "http://www.byte-artist.de",
  10.      "email": "andreas.kempe@byte-artist.de",
  11.      "role": "Author"
  12. }
  13. ],
  14. "require": {
  15. "composer/installers": "~1.0"
  16. }
  17. }


diese Dateien werden direkt in den jeweiligen Source Ordnern hinterlegt.

Nun noch ein Beispiel, wie die Datei im aktuellen Projekt aussieht:


JSON code

  1. {
  2. "name": "composer/byte-artist",
  3. "description": "composer install datei für byte-artist",
  4. "license": "MIT",
  5. "authors": [
  6. {
  7.      "name": "Andreas Kempe",
  8.      "homepage": "http://www.byte-artist.de",
  9.      "email": "andreas.kempe@byte-artist.de",
  10.      "role": "Author"
  11. }
  12. ],
  13. "config": {
  14. "vendor-dir": "./"
  15. },
  16. "require": {
  17. "composer/installers": "~1.0",
  18. "cad/tools": "1.0.0",
  19. "cad/logger": "1.0.0"
  20. },
  21. "repositories": [
  22. {
  23.     "type": "path",
  24.     "url": "<absoluter/pfad/zu/den/repos>/CAD/Logger"
  25. },
  26. {
  27.     "type": "path",
  28.     "url": "<absoluter/pfad/zu/den/repos>/CAD/Tool"
  29. } ],
  30. "extra": {
  31. "installer-paths": {
  32.      "<absoluter/pfad/zum/projekt>/library/CAD/Tool": ["cad/tools"],
  33.      "<absoluter/pfad/zum/projekt>/library/CAD/Logger": ["cad/logger"]
  34. }
  35. }
  36. }


Entscheidend ist hier die Angabe von path als type für das jeweilige repository.

Man sieht an dieser Datei gleich noch eine andere Besonderheit. Ich hatte nämlich das Problem, das ich die Ordner immer groß geschrieben habe und composer die Dateien klein auscheckt, ich habe auch diverse Dateien und Klassen in anderen Ordnern oder brauche sie an bestimmten Orten in den Projekten. Daher musste eine Lösung her, die sich bei composer composer/installers nennt.

Dieses Packet muss in jedem umzuleitenden Repo als require eingetragen sein. In der composer.json des Projektes hinterlegt man einen Zweig extra in dem man die Pfade einträgt.

bei einem composer install oder composer update werden die Dateien nun an den korrekten Ort verlinkt und machen das entwickeln zentraler, komfortabler und vor allem flexibler.

ich hoffe dieses kleine How To hat gefallen ;)

Viel Spaß beim ausprobieren.