Ich war kurz davor zu verzweifeln, denn mein Komment-Plugin für Kirby ließ sich einfach nicht via zip installieren. Die Lösung? Eine Zeile…


Manchmal zweifle ich am eigenen Verstand. Mein Kirby-Plugin "Komments" lief bei mir eigentlich wunderbar. Mein Kirby Setup basiert auf composer und so habe ich das Plugin auch via Composer installiert. Das funktionierte auch immer wunderbar.

Dann bekam ich eine E-Mail. Jemand hatte mein Plugin installiert und es konnten keine Kommentare gesendet werden. Noch viel schlimmer: Es konnten auch im Panel keine Seiten mehr gespeichert werden!

Der Fehler: Angeblich wurde eine Datei nicht gefunden. Zuerst fiel mir der relative Pfad zur Datei in der Fehlermeldung auf. Ich vermutete, daran würde es liegen. Also habe ich ein bisschen mit dem composer Setup rumgespielt, aber es funktionierte ja bei mir alles.

Ich habe lokal das Kirby Starterkit laufen, damit ich dort meine Plugins ausprobieren kann. Manchmal will man ja abseits von Unit-Tests auch nochmal was klicken und eben solche Probleme nachvollziehen. Ich kopierte also meine lokale Entwicklerversion des Plugins ins Starterkit: Funktionierte.

Ich aktualisierte die Dateien auf Github, lud die zip-Datei von dort runter: Funktionierte nicht.

Nach vielem Hin und Her, nach einem Umbau der ganzen composer.json, anpassen der autoloads wusste ich nicht mehr weiter. Sobald ich das zip von Github zog, lief das Plugin nicht mehr. Es musste also irgendwas beim Generieren des Zips passieren.

Also habe ich die Verzeichnisse und Dateien meine Entwicklungsversion mit der Zip-Version verglichen:

diff -rq kirby/komments kirby-test/starterkit-master/site/plugins/komments

Und da prangte die Zeile:

Only in kirby/komments/vendor/indieweb/mention-client: src

Der Mentionclient hat all seine Dateien im eigenen src Verzeichnis liegen. Das src Verzeichnis gab es bei mir lokal und es lag auf GitHub. Ich grübelte etwas und dann kam die böse Vorahnung…

Im Tutorial für das Monolithic Plugin Setup für Kirby-Plugins gibt es die Datei .gitattributes die dafür sorgt, dass bestimmte Dateien und Verzeichnisse nicht im Package landen. Das sind alles Dateien, die man zur Entwicklung aber nicht im laufenden Betrieb braucht. Und dort stand diese eine Zeile:

src export-ignore

Ich habe das einfach übernommen und nicht groß hinterfragt, denn ich dachte, sie würde nur bewirken, dass das src Verzeichnis auf oberster Ebene (wo die JavaScript-Quelldateien liegen) beim Exportieren (in ein Zip) ignoriert wird. Dem ist aber nicht so. Vielmehr werden alle src Verzeichnisse im Repository ignoriert. Was natürlich fatal ist, weil man nie weiß, ob evtl irgendeine dependency so ein Verzeichnis im laufenden Betrieb benötigt. Genau das war bei mir der Fall.

Ich hätte mir also das ganze Experimentieren mit Autoloads sparen können. Die Lösung war das Entfernen dieser Zeile. Die nötigen Dateien waren daraufhin wieder im Zip enthalten und alles funktionierte. Puh…