Czasami bywa tak, że kilka bibliotek instalowanych przez Composera używa tych samych zależności. Nie ma problemu, kiedy korzystają one z tych samych wersji. Komplikacje powstają gdy jedna z nich wymaga starszej wersji, a druga nowszej. Jak sobie z tym poradzić, zanim dostawca biblioteki przygotuje aktualizację?
Przykładem takiego błędu jest obecnie (stan na 12.10.2020) instalacja FreshMail API na Laravel 7.0 i wyżej. Nowszy Laravel wymaga biblioteki monolog/monolog w wersji 2.0, a FreshMail 1.25.
1 2 3 4 5 6 7 8 9 10 11 12 | composer require freshmail/rest-api Using version ^3.0 for freshmail/rest-api ./composer.json has been updated Running composer update freshmail/rest-api Loading composer repositories with package information Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - Root composer.json requires freshmail/rest-api ^3.0 -> satisfiable by freshmail/rest-api[v3.0.0]. - freshmail/rest-api v3.0.0 requires monolog/monolog ^1.25 -> found monolog/monolog[1.25.0, ..., 1.x-dev] but the package is fixed to 2. 1.1 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command. |
Jedyne co można teraz zrobić, to wymusić instalację wyższej wersji i dodać alias, tak by FreshMail myślał, że korzysta ze starszej wersji. Trzeba też trzymać kciuki, żeby wadliwa biblioteka działała na wersji nowszej ;-)
Dodajemy więc w composer.json następujący kod:
1 2 3 | "require": { "monolog/monolog": "2.1 as 1.25", }, |
Teraz jeszcze aktualizacja…
1 | coposer update |
… i biblioteka ze starszą wersją zależności powinna ruszyć. Można podjąć próbę jej instalacji.
PS. Przy okazji – jeśli ktoś z FreshMail to przeczyta, bardzo proszę o zajęcie się tematem :-)
Tagi: composer • konflikt • zależności