Skript in Abhängigkeit benötigt den Pfad zum Composer Autoloader

9

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:

%Vor%

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:

%Vor%

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:

  1. 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.

  2. 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.

    
David Weinraub 03.09.2012, 04:13
quelle

1 Antwort

3

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.

    
David Weinraub 04.09.2012, 03:24
quelle

Tags und Links