Theme kompiliert sich automatisch selbst und schließt Plugin-Code aus

Hallo zusammen,

bei einem unserer Kunden (Shopware 5.6.6) wird das Theme gegen 12 Uhr automatisch kompiliert. Ich konnte bisher nicht herausfinden, welches Skript das macht. Zusätzlich wird bei dem automatischen Compile der JS-Code eines Plugins nicht mit in die Theme-JS aufgenommen.

Welches Skript könnte das sein? Externe Crons gibt es nicht und beim Shopware-Cron laufen nur die Shopware_CronJob_Search, Shopware_CronJob_ArticleComment und Shopware_CronJob_ArticleSort um 12 Uhr, aber ich kann mir nicht vorstellen, dass das einer von denen ist.

Hat irgendjemand eine Idee, woran das liegen könnte? Und auch, warum dann der Plugincode ignoriert wird? Wenn ich das Theme über den Theme Manager kompiliere, wird der Plugincode berücksichtigt.

Viele Grüße,
Malte

Ich konnte es auf den Cronjob Shopware_CronJob_ArticleSort eingrenzen, der ein selbstgeschriebener Cronjob ist, der letztlich den Befehl bin/console sw:theme:cache:generate ausführt.

Frage ist jetzt, warum dieser Befehl das Plugin-JavaScript ignoriert. Auch wenn ich den Befehl direkt über die Konsole ausführe wird der JavaScript-Code ignoriert. Während der Ausführung kommen folgende Meldungen:

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Notice: Array to string conversion in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651

Warning: substr() expects parameter 1 to be string, array given in /vendor/oyejorge/less.php/lib/Less/Parser.php on line 2651
Clearing HTTP cache ...

Ich glaub jetzt aber mal nicht, dass die Warnings und Notices was damit zu tun haben?

Viele Grüße,
Malte

Sieht für mich danach aus, dass der Shop selber unter PHP 7 läuft und darum die Fehler im Backend nicht hat, die Console aber unter PHP 8 läuft - so als erste Vermutung.
Das sind so typische Fehler, die bei einem PlugIn auftreten (und gab es auch im Core), wenn da etwas nicht sauber für PHP 8 angepasst wurde.

Wobei Shopware 5.6.6 sicherlich nicht für PHP 8 geeignet ist (ab 5.7) :wink:

Danke für den Hinweis, sowohl Shop als auch CLI laufen aber unter PHP 7.3 :frowning:

Vielleicht wurde der JS-Code einfach nur nicht sauber im Plugin eingebunden. Wo liegt denn der Code genau?

Ich hab vorhin mal den Command sw:theme:dump:configuration ausgeführt und die less und js Dateien von dem Plugin tauchen in dem Theme-Dump nicht mit auf.

Die Dateien liegen in der exakt gleichen Verzeichnisstruktur:
engine/Shopware/Plugins/Community/Frontend/[Pluginname]/Views/frontend/_public/src/less/all.less

Für Plugin A funktioniert es, für Plugin B nicht. Die Dateiberechtigungen sind ebenfalls dieselben.

Ich werde als nächstes Mal vom JavascriptColelctor die collectJavascriptFiles debuggen.

Okay, hab das Problem gefunden. In dem Plugin werden die Events zum Collecten der Less- und JavaScript Dateien untypisch registriert. Ist ein älteres Drittanbieter-Plugin, das nicht mehr aktualisiert wird. Werde das dann wohl selbst umschreiben müssen.

Also, das Plugin ist noch nach altem Schema programmiert ohne services.xml und added alle Subscriber im Event Enlight_Controller_Front_DispatchLoopStartup. Deshalb greift es nicht für die CLI-Commands.

Jemand eine Idee, ob es da ein Event gibt, was entsprechend auch beim Ausführen des Commands greifen würde?

Hab jetzt das Shopware_Command_Before_Run genommen; falls jemand noch eine bessere Idee hat, gerne Bescheid geben.