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.Skript in Abhängigkeit benötigt Pfad zu Composer Autoloader
Ich bin mir bewusst, dass ich in dem mylib
Paket eine config
Einstellung in composer.json
mit einer Reihe von Fächern zu importieren angeben:
{
"name": "myvendor/mylib",
"config" : {
"bin" : ["bin/console.php"]
}
}
Wenn das mymain
Projekt ist ein Komponist installieren/aktualisieren, dann ist dies mylib/bin/console.php
ist Symlink als mymain/bin/console.php
Ferner ich bin mir bewusst, dass das mymain
Projekt angeben - in seinem eigenen composer.json
- wo er will Bins Abhängigkeit symlinked werden:
{
"name": "myvendor/mymain",
"config": {
"bin-dir": "scripts"
}
}
In diesem Fall wird das Konsolenskript dann als scripts/console.php
symbolisiert.
Dies funktioniert gut - und ist cool, als alle raus, übrigens. ;-)
Allerdings muss das Skript bin/console.php
selbst den Composer-generated vendor/autoloader.php
enthalten. Wenn mylib
isoliert entwickelt wird, kennt das Skript bin/console.php
seinen eigenen Standort relativ zu vendor/autoloader.php
, damit er es leicht aufnehmen kann. Aber sobald es als eine Abhängigkeit in ein anderes Projekt importiert wird - myvendor/mymain
, in diesem Fall - dann gibt es nur das mymain/vendor/autoloader.php
Skript. Im Prinzip kann das Konsolenskript nicht wissen, wo er sich relativ zu diesem Autoloader-Skript befindet.
Bietet Composer eine Umgebungsvariable, auf die das Konsolenskript zugreifen kann, damit das Skript das richtige vendor/autoloader.php
Skript finden kann?
BTW: Ich bin mir bewusst, die Composer CLI environment variable, so dass ich denke ich es eine Voraussetzung machen könnte, dass der Import von Projekt - mymain
- definiert die var COMPOSER_VENDOR_DIR
(und Export!). Dann kann mein Konsolenskript den Autoloader des Projekts finden. Aber das scheint potenziell problematisch, dass:
Wir die Einstellung nur für dieses Projekt anwenden möchten, sondern eine Schale var (und ein Export) würde gelten für alle von dieser Shell-Sitzung zugegriffen Projekte. Scheint vermessen von meiner kleinen Abhängigkeit -
myvendor/mylib
- das auf ein Importprojekt durchzusetzen.Im Prinzip sollte die Abhängigkeit selbst -
myvendor/mylib
- in der Lage sein zu finden, was er braucht. Es scheint nicht richtig, den Importeur zu belasten.
WDYT? Danke im Voraus. Ideen willkommen.
Sie müssen wirklich nicht wiederholen, können Sie da so aussehen zwei dirs bis nur// –
Seldaek
@Seldaek passen würde: Richtig, ich endlich verstanden, Ihre Probe aus [jsonlint] (https: // github.com/Seldaek/jsonlint/blob/master/bin/jsonlint) und auf diese Weise implementiert werden. Vielen Dank! –
Scheint Leute haben immer noch Probleme mit diesem (mich!) Found eine Antwort hier: http://stackoverflow.com/questions/35271282/how-can-i-provide-a-script-for-php-clivia -composer-als-standalone-and-as-depend – VladFr