Как использовать свою локальную версию суб-пакета composer?

В composer.json прописана зависимость от пакета vendor/a:

{
  "require": {
    "vendor/a": "^0.1.0"
  }
}


У пакета vendor/a в свою очередь зависимость от пакета vendor/b:

{
  "require": {
    "vendor/b": "1.*"
  }
}


Допустим пакет vendor/b не работает так как надо (есть ошибки) и мы хотим поправить пакет vendor/b. Чтобы ускорить процесс поставки поправленного пакета vendor/b, хочется сделать так, чтобы композер при поиске зависимостей использовал наш форк (на время, пока разработчик пакета примет пулл-реквест vendor/b). При этом, прежде чем запушить правки по пакету, хочется проверить работу наших правок

Вопрос: можно ли заставить композер брать локальную копию пакета, чтобы не править исходники во время тестов прямо в папке /vendor/vendor/b?

Локальную копию пакета я положил в папку .packages/vendor-b и хочу, чтобы композер брал версию именно из этой папки (предварительно я внёс правки и локально даже закомитил, допустим в ветку local-cache)

Если в composer.json добавить локальный репозиторий, то композер не хочет брать новую версию пакета

"repositories": [
    {
      "type": "path",
      "url": ".packages/vendor-b",
      "options": {
        "symlink": true
      }
    }
],


Как ему об этом сказать?

Варианты с указанием в require вызываются конфликты версий. Если указать пакет в replace — композер его вовсе удаляет
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 2
можно сделать через autoload, пример с подменой зависимого пакета Psr/Log для monolog/monolog

{
    "require": {
        "monolog/monolog": "^1.23"
    },
    "autoload": {
        "psr-4": {"Psr\\Log\\": "./.package/log/Psr/Log"}
    }
}


само сабой выполнить команду:
composer dump-autoload
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы