Estoy desarrollando un paquete - myvendor/mylib
- que planeo distribuir usando Composer, probablemente a través de Packagist. Este paquete contiene, entre otras cosas, un script PHP de línea de comandos bin/console.php
que me gustaría poner a disposición de los proyectos, digamos myvendor/mymain
, que importan el paquete mylib
.Script en la ruta de necesidades de dependencia al autocargador Composer
Soy consciente de que puedo especificar en el paquete mylib
un entorno config
en composer.json
con una serie de contenedores para importar:
{
"name": "myvendor/mylib",
"config" : {
"bin" : ["bin/console.php"]
}
}
Cuando el proyecto mymain
Qué instala un compositor/actualización, entonces este mylib/bin/console.php
es un enlace simbólico como mymain/bin/console.php
Además, soy consciente de que el proyecto mymain
puede especificar - en su propia composer.json
- donde que quiere contenedores de dependencia a tener un enlace simbólico:
{
"name": "myvendor/mymain",
"config": {
"bin-dir": "scripts"
}
}
En este caso, la secuencia de comandos de la consola se enlaza simbólicamente como scripts/console.php
.
Esto funciona bien, y es genial ya que todos salen, por cierto. ;-)
Sin embargo, la secuencia de comandos bin/console.php
sí necesita incluir el generado por el compositor vendor/autoloader.php
. Al desarrollar mylib
de forma aislada, el script bin/console.php
conoce su propia ubicación relativa a vendor/autoloader.php
, por lo que puede incluirla fácilmente. Pero una vez que se importa como una dependencia a otro proyecto - myvendor/mymain
, en este caso - entonces solo está el script mymain/vendor/autoloader.php
. En principio, el script de consola no puede saber dónde reside en relación con el script del autocargador.
Does Composer proporciona alguna variable de entorno (accesible para el script de la consola) que permite al script ubicar el script correcto vendor/autoloader.php
?
Por cierto: soy consciente de la Composer CLI environment variable, así que me imagino que podría hacer que el requisito de que el proyecto de importación - mymain
- definir el var COMPOSER_VENDOR_DIR
(y exportación). Entonces mi script de consola puede usar eso para encontrar el autocargador del proyecto. Pero eso parece potencialmente problemático, ya que:
Queremos que el ajuste sólo se aplique a este proyecto, sino una var cáscara (y una exportación) se aplicaría a todos proyectos que se accede desde esa sesión de terminal. Parece presuntuoso de mi pequeña dependencia -
myvendor/mylib
- imponer eso en un proyecto de importación.En principio, la dependencia en sí -
myvendor/mylib
- debe ser capaz de encontrar lo que necesita. No parece correcto ponerle la carga al importador.
WDYT? Gracias por adelantado. Ideas bienvenidas
No necesita iterar en realidad, solo puede mirar dos directorios ya que coincidiría con// –
Seldaek
@Seldaek: Bien, finalmente entendí su muestra de [jsonlint] (https: // github.com/Seldaek/jsonlint/blob/master/bin/jsonlint) e implementado de esa manera. Muchas gracias! –
Parece que la gente todavía tiene problemas con esto (¡yo!) Encontré una respuesta aquí: http://stackoverflow.com/questions/35271282/how-can-i-provide-a-script-for-php-cli-via -composer-as-independiente-y-como-depend – VladFr