Tengo un par de bibliotecas [Foo y Bar] que estoy desarrollando en concierto, pero todavía son cosas técnicamente separadas. Anteriormente, acababa de redefinir el cargador automático para "Foo\\": "../Foo/src"
que me gustara , pero ahora que agregué una dependencia de Guzzle a Foo, Bar voltea su tapa porque no es una de sus dependencias.
Estructura de directorios:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Declaración teórica de carga automática: [en Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Código de ejemplo:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
¿Cómo puedo resolver esto sin configurar un repositorio de Composer local? Quiero mantenerlos como paquetes separados, solo que uno requiere el otro y, por lo tanto, procesa las dependencias del otro.
edición posterior a la respuesta:
Gracias a infomaniac he hecho lo siguiente:
Inicializó el repositorio de git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Añadida la configuración del compositor:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
¡Y luego composer update
!
sammitch/foo
es el nombre del paquete y literalmente no tiene nada que ver con su ubicación. Construirá una lista de paquetes disponibles basada en sus repositorios configurados, en este caso recuperando el composer.json del repositorio git local especificado, y luego composer maneja el resto. El sammitch/foo
paquete se copia en la vendor
carpeta de la aplicación actual al igual que cualquier otro paquete.