Mam kilka bibliotek [Foo i Bar], które rozwijam wspólnie, ale technicznie wciąż są oddzielnymi rzeczami. Wcześniej właśnie ponownie zdefiniowałem autoloader "Foo\\": "../Foo/src"
, aby polubił, ale teraz, gdy dodałem zależność Guzzle do Foo, Bar odwraca jego pokrywę, ponieważ nie jest jedną z jego zależności.
Struktura katalogów:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Teoretyczna instrukcja automatycznego ładowania: [w Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Przykładowy kod:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Jak mogę rozwiązać ten problem bez konfigurowania lokalnego repozytorium Composer? Chcę utrzymywać je jako oddzielne pakiety, tylko że jeden wymaga drugiego i dlatego przetwarza zależności drugiego.
edycja po odpowiedzi:
Dzięki infomaniac wykonałem następujące czynności:
Zainicjowałem repozytorium git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Dodano konfigurację kompozytora:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
A potem composer update
!
sammitch/foo
to nazwa pakietu i nie ma dosłownie nic wspólnego z tym, gdzie się znajduje. Utworzy listę dostępnych pakietów na podstawie skonfigurowanych repozytoriów, w tym przypadku pobierając plik composer.json z określonego lokalnego repozytorium git, a następnie composer zajmie się resztą. sammitch/foo
Pakiet jest kopiowany do bieżącej aplikacji vendor
folderu takie same jak każdy inny pakiet.