Как через composer удобно подменить системный пакет его альтернативной версией

от автора

В любом большом проекте, где используется composer, рано или поздно возникает одна проблема. Во фреймворке, или в каком-то его отдельном пакете исправляют ошибку или добавляют функционал, а разработчик не спешит принимать pull request. При этом хочется временно использовать обновленный пакет, а потом, когда pull request все-таки примут, вернуться к официальной версии. Ситуация также осложняется тем, что пакет может быть указан в зависимостях других пакетов, поэтому просто заменить один пакет на другой в composer.json не получится.

Я сам столкнулся с этой проблемой: в yii/yii2-elasticsearch нет поддержки scroll API, а она мне нужна. При этом соответствующий pull request висит с октября 2015 года. Естественно, я задался вопросом: как бы поудобнее временно подключить к своему проекту версию пакета, где реализован нужный функционал? При этом я понимаю, что рано или поздно этот pull request все-таки примут, и придется переключаться обратно.

Вот мое решение:

1. Сделать fork нужной версии пакета. В моем случае, я ответвился от 13leaf/yii2-elasticsearch. Появился пакет beowulfenator/yii2-elasticsearch.

2. В своем экземпляре пакета внести изменение в composer.json, которое позволит этому пакету заменить официальный. Нужно добавить следующий ключ:

"replace": {     "yiisoft/yii2-elasticsearch":"*" } 

Так мы указали composer, что если у какого-то другого компонента в зависимостях есть yiisoft/yii2-elasticsearch, то теперь эта зависимость будет удовлетворена нашим собственным компонентом.

3. Заменить в composer.json основного проекта ссылку на официальный пакет ссылкой на собственный пакет.
Было:

"yiisoft/yii2-elasticsearch":"*"

Стало:

"beowulfenator/yii2-elasticsearch": "dev-master"

4. Можно было бы зарегистрировать свой пакет в packagist, но так как он временный, нечего создавать путаницу. Достаточно указать в composer.json основного проекта ссылку на репозиторий:

"repositories": [     {         "type": "vcs",         "url": "https://github.com/beowulfenator/yii2-elasticsearch.git"     } ] 

После этого достаточно выполнить composer update, и теперь вместо официального пакета будет использоваться наш собственный. Когда же разработчики все-таки примут pull request, достаточно будет отменить изменение в composer.json основного проекта.

ссылка на оригинал статьи http://habrahabr.ru/post/274651/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *