Як через 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 основного проекту.

Джерело: Хабрахабр
  • avatar
  • 0

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.