Композитор требует локального пакета


у меня есть несколько библиотек [Foo и Bar], которые я разрабатываю совместно, но все еще технически отдельные вещи. Ранее я только что переопределил автозапуск, чтобы понравиться "Foo": "../Foo/src", но теперь, когда я добавил зависимость от жратвы в Foo, бар переворачивает его крышку, потому что это не одна из его зависимостей.

каталог структуру:

/home/user/src/
    Foo/
        src/
            FooClient.php
        composer.json
    Bar/
        src/
            BarClient.php
        composer.json

теоретическое заявление о загрузке: [в баре / композиторе.json]

"require": {
    "local": "../Foo/composer.json"
}

пример код:

require('vendor/autoload.php');

$f = new BarBarClient(new FooFooClient());

как я могу решить эту проблему без настройки локального РЕПО композитора? Я хочу поддерживать их как отдельные пакеты, только то, что один требует другого, и поэтому обрабатывает зависимости другого.

редактирование после ответа:

благодаря infomaniac я сделал следующее:

инициализировал репозиторий git:

cd ~/src/Foo && git init && echo -e "vendorncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"

добавлена конфигурация композитора:

"require": {
    "sammitch/foo": "dev-master"
},
"repositories": [{
    "type": "vcs",
    "url": "/home/sammitch/src/Foo"
}],

а то composer update!

2 60

2 ответа:

вы можете использовать композитора репозитории характеристика

https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository

вместо использования формата http укажите путь к файлу на диске.

способ связать с локальным пакетом в разработке-это сначала добавить в ваш основной проект composer.json a хранилище, например:

"repositories": [
    {
        "type": "path",
        "url": "/full/or/relative/path/to/development/package"
    }
]

вы также должны либо иметь версию, указанную в вашем пакете разработки composer.json или то, как я это делаю, чтобы потребовать пакет с помощью @dev, например:

composer require "vendorname/packagename @dev"

он должен выводить:

- Installing vendor/packagename (dev-develop)
Symlinked from /full/or/relative/path/to/development/package

The @dev в команде require важно, композитор использует это для пикапа исходный код и символическая ссылка на ваш новый пакет.

это флаг стабильности, добавленный к ограничению версии (см. ссылка на пакет).

они позволяют дополнительно ограничить или расширить стабильность пакета выходит за рамки минимум-стабильность установочный.

флаги минимальной стабильности:

доступные параметры (в порядке стабильности) являются dev,alpha, beta,RC и stable.