Ich entwickle ein Paket - myvendor/mylib
- das ich mit Composer verteilen möchte, wahrscheinlich über Packagist. Dieses Paket enthält unter anderem ein Kommandozeilen-PHP-Skript bin/console.php
, das ich Projekten zur Verfügung stellen möchte - sagen wir myvendor/mymain
- die das mylib
-Paket importieren.
Mir ist bewusst, dass ich im mylib
Paket eine config
Einstellung in composer.json
mit einem Array von zu importierenden Bins angeben kann:
Wenn das mymain
-Projekt von einem Composer installiert / aktualisiert wird, dann wird mylib/bin/console.php
als mymain/bin/console.php
symbolisiert. Außerdem weiß ich, dass das mymain
-Projekt - in seinem eigenen composer.json
- angeben kann, wo < em> he möchte, dass Abhängigkeitsbins symbolisch verknüpft sind:
In diesem Fall wird das Konsolenskript dann als scripts/console.php
symbolisiert.
Das funktioniert gut - und ist cool, wie alle rauskommen, übrigens. ; -)
Allerdings muss das Skript bin/console.php
selbst den vom Composer generierten vendor/autoloader.php
enthalten. Wenn Sie mylib
isoliert entwickeln, kennt das Skript bin/console.php
seinen eigenen Standort relativ zu vendor/autoloader.php
, sodass er es leicht einbeziehen kann. Aber sobald es als Abhängigkeit in ein anderes Projekt importiert wird - in diesem Fall myvendor/mymain
- gibt es nur das Skript mymain/vendor/autoloader.php
. Im Prinzip kann das Konsolenskript nicht wissen, wo er sich relativ zu diesem Autoloader-Skript befindet.
Bietet Composer eine Umgebungsvariable, die für das Konsolenskript verfügbar ist und die es dem Skript ermöglicht, das richtige vendor/autoloader.php
script zu finden?
Übrigens: Mir ist die Composer CLI-Umgebungsvariable bekannt, also könnte ich mir vorstellen, dass ich das könnte Machen Sie es zu einer Anforderung, dass das importierende Projekt - mymain
- die Variable COMPOSER_VENDOR_DIR
definiert (und exportiert!). Dann kann mein Konsolenskript den Autoloader des Projekts finden. Aber das scheint potentiell problematisch zu sein:
Wir möchten, dass die Einstellung nur auf dieses -Projekt angewendet wird, aber eine Shell-Variable (und ein Export) würde auf alle Projekte angewendet werden, auf die von dieser Shell-Sitzung zugegriffen wird . Scheint anmaßend von meiner kleinen Abhängigkeit - myvendor/mylib
-, das auf ein Importprojekt anzuwenden.
Im Prinzip sollte die Abhängigkeit selbst - myvendor/mylib
- in der Lage sein zu finden, was er braucht. Es scheint nicht richtig zu sein, dem Importeur die Pflicht aufzuerlegen.
WDYT? Danke im Voraus. Ideen willkommen.
Ein Ansatz (der aus Diskussionen mit @igorw über IRC freenode #composer hervorging, den ich paraphrasiere und auf dem ich etwas expandiere) ist, dass das bin-Skript console.php
das Dateisystem iterieren soll, beginnend mit __DIR__
, auf das Vorhandensein von autoload.php
achten.
Tags und Links php autoload composer-php