У мене є декілька бібліотек [Foo і Bar], які я розвиваю на концерті, але технічно все ще є різними речами. Раніше я просто переосмислював автозавантажувач, щоб подобатися "Foo\\": "../Foo/src"
, але тепер, коли я додав залежність від Guzzle до Foo, Bar перевертає кришку, оскільки це не одна з її залежностей.
Структура каталогу:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Теоретична заява про автоматичне завантаження: [в Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Приклад коду:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Як я можу це вирішити без встановлення місцевого репортажу композитора? Я хочу підтримувати їх як окремі пакети, просто для того, щоб один вимагав іншого, і для цього обробляти залежності інших.
редагування після відповіді:
Завдяки infomaniac я зробив наступне:
Ініціалізовано git repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Додано конфігурацію композитора:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
І тоді composer update
!
sammitch/foo
- назва пакету і не має нічого спільного з тим, де він знаходиться. Побудує список доступних пакетів на основі налаштованих репостів, у цьому випадку витягуючи composer.json з вказаного локального git repo, а потім композитор обробляє решту. sammitch/foo
Пакет копіюються в поточному додатку vendor
папки так само , як будь-який інший пакет.