Eu tenho algumas bibliotecas [Foo e Bar] que estou desenvolvendo em conjunto, mas ainda são coisas tecnicamente separadas. Anteriormente, acabei de redefinir o autoloader para like "Foo\\": "../Foo/src"
, mas agora que adicionei uma dependência Guzzle a Foo, Bar vira a tampa porque não é uma de suas dependências.
Estrutura do diretório:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Instrução teórica de carregamento automático: [em Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Código de exemplo:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Como posso resolver isso sem configurar um repositório local do Composer? Quero mantê-los como pacotes separados, apenas aquele requer o outro e, portanto, processa as dependências do outro.
edição pós-resposta:
Graças ao infomaníaco, fiz o seguinte:
Inicializou o repo git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Adicionada a configuração do composer:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
E então composer update
!
sammitch/foo
é o nome do pacote e literalmente não tem nada a ver com onde ele está localizado. Construirá uma lista de pacotes disponíveis com base em seus repositórios configurados, neste caso obtendo o composer.json do repositório git local especificado, e então composer trata do resto. O sammitch/foo
pacote é copiado para a vendor
pasta do aplicativo atual da mesma forma que qualquer outro pacote.