С помощью Composer легко и удобно подключать пакеты в приложениях PHP. Это замечательный инструмент.

Пишем команду composer require some-cool-guy/cool-package и код скачивается и подключается в вашем приложении.

Но бывает так, что вам нужно изменить что-то в том пакете который вы скачиваете.

Зачем вносить исправления? 👀

  1. Пакет давно не обновлялся, и указанные в нём зависимости устарели, а обновить их без участия автора пакета вы не можете — пакет не устанавливается;

  2. Вы обнаружили ошибку, которую можно исправить только в коде пакета, опять же нужно участие автора пакета.

Конечно, можно отправить Pull Request с исправлениями и ожидать что автор примет ваши исправления. Или создать Issue и описать проблему, в надежде что автор сам исправит код.

Но это не всегда подходит:

  1. Пакет может быть заброшен, автор может не отвечать на PR и Issue

  2. Автор вполне может отклонить ваши правки, по любым собственным причинам

  3. Вы не можете ждать, потому что ваши сроки ограничены

В этом случае рекомендуется сделать форк (fork — копию репозитория в GitHub) пакета и подключать собственный форк вместо оригинала.

Делаем форк и подключаем в проект

Столкнувшись с той же проблемой, я так и не смог найти работающий способ подключить форк через репозиторий GitHub. Не помог ни Гугл, ни эксперименты, ни отладочный режим запуска композера. 😕

Получилось добиться результата следующим способом:

  1. Клонируем код пакета с репозитория GitHub в папку проекта.

    cd my-project
    git clone https://github.com/some-cool-guy/cool-package.git
    
  2. Указываем репозиторий в composer.json:

    {
      "repositories": [
        {
          "type": "path",
          "url": "./cool-package"
        }
      ]
    }
    
  3. Подключаем пакет, указывая версию “@dev” — композер подхватит код из локальной копии.

    composer require "some-cool-guy/cool-package @dev"
    

    При этом композер создаёт символьную ссылку в папке “vendor”, указывающую на наш код.

  4. Правим код пакета, как нам угодно.

По сути, мы не сделали “настоящий форк” а только скопировали код. Этот способ не такой чистый как подключение форка Git-репозитория. Но он железно работает и не требует больших усилий.