Как разработать зависимый пакет композитора без необходимости совершать или публиковать изменения?

У меня есть приложение A, у которого есть файл composer.json, определяющий зависимость от пакета P, который является моим собственным новым блестящим пакетом. В моем пакете P есть файл composer.json, который определяет зависимости от библиотеки L и рамки F. В моем пакете P пока нет удаленного репозитория, и он еще не опубликован на packagist.org – я в основном занимаюсь этим, пробуя разные вещи запустив приложение A в браузере и постоянно изменяя свой пакет P, от которого зависит приложение A.

Есть некоторые проблемы, которые действительно усложняют рабочий процесс для меня:

1) Определение зависимости от A на P возможно только с помощью локального репозитория, как описано здесь: https://getcomposer.org/doc/05-repositories.md Проблема заключается в том, что это заставляет меня совершать каждое изменение P до Я могу проверить его на A.

2) Ссылаясь на 1) это означает, что я должен запускать composer update каждый раз, когда я совершил изменение на P. (Которое я не хочу совершать в первую очередь.)

3) С другой стороны, когда я не использую локальный репозиторий в P, я не могу определить реальную зависимость от A на P, что означает, что запущенная composer install не будет устанавливать зависимости L и F, определенные в файле composer.json из P ,

Итак, в моем решении есть два возможных рабочих процесса:

1) Зафиксируйте изменения в composer update P, composer update в A и посмотрите, как это изменилось.

2) Не используйте локальные репозитории в качестве зависимостей и просто скопируйте зависимости, определенные в файле composer.json P, в файл composer.json файла A, чтобы иметь возможность использовать composer install для получения зависимостей L и F.

В основном я ищу рабочий процесс для разработки нового пакета композиторов, где я могу запустить composer install/update для установки всех зависимостей сторонних разработчиков, но без необходимости вносить изменения в свои локальные пакеты для проверки изменений.

Есть ли какое-либо решение упомянутых проблем?

Большое спасибо!

    Решение, которое я использую, когда я в ситуации, когда мне нужно работать с несколькими пакетами в одно и то же время, заключается в регистрации каждого пакета локально, после composer install или после первого composer update я удаляю этот пакет из каталога поставщика и ссылаюсь на него где я храню локальную версию «WIP».

    Например:

    • В composer.json мне нужен my_vendor/packageA , который зарегистрирован локально внутри ~/.composer/config.json .
    • Я выполняю composer update my_vendor/packageA чтобы сделать композитор осведомленным о моем новом пакете.
    • После того, как композитор завершит установку моего пакета:
      • cd vendor / my_vendor && rm -rf packageA && ln -s ../../../packageA.

    Который оставит меня с чем-то вроде:

    • working_dir /
      • packageA / ( здесь я работаю над packageA )
      • Projecta /
        • приложение
        • ЦСИ
        • продавец /
          • Vendor1 /
          • vendor2 /
          • my_vendor /
            • упаковкаA -> ../../../packageA

    Это позволяет мне:

    • Чтобы изменить packageA даже изнутри моего поставщика
    • Мне не нужно фиксировать packageA прежде чем я смогу использовать эти изменения внутри моего projectA .

    Когда packageA будет достаточно стабильным, символическая ссылка будет удалена, и все вернется к нормальной работе, используя версию VCS / packagist.

    Я пробовал разные решения с течением времени, и я обнаружил, что это работает лучше всего для меня.

    Альтернативным решением, которое я использую, когда могу, является регистрация каталогов PSR-0 вручную, для каждого префикса:

     <?php $autoloader = require_once __DIR__.'/vendor/autoload.php'; $autoloader->add('MyVendor\\Dummy\\', '/path/to/dummy-component/src'); // now you can use MyVendor\Dummy as normal. 

    Примечание. Для PSR-4 существует метод addPsr4() .