2012-09-29 16 views
9

To jest scenariusz.Ustalanie zależności Piekło z kompozytorem

Masz pakiet A i pakiet B w swoim composer.json (twoja aplikacja zależy od tego 2 pakietów).

Obie paczki A i B zależą od opakowania C, ale w różnych wersjach. Powiedz A zależy od C v2.1, a B zależy od C v2.2.

Pojawiają się konflikty wersji.

Zarówno A, B, jak i C są paczkami osób trzecich.

Jak rozwiązać ten problem?

+0

Czy jest możliwe, A lub B do pracy z ta sama wersja C? Wiem, że różne wersje są wymuszane przez te pakiety, ale prawdopodobnie możesz zdefiniować repozytoria dla tych trzech w twoim composer.json, aby nadpisać wersje. Wiem, że to włamanie, ale może pozwolić ci odejść. –

+0

Tak, jest. Ale nie jestem pewien, czy możesz to zrobić. Spróbuję. ale wiem, że jeśli umieścisz swojego kompozytora.json '" C ":" 2.2 "', a A ma '" C ":" 2.1 "', dostaniesz błędy. – umpirsky

+0

Tak, ale moim pomysłem jest zdefiniowanie repozytoriów dla wszystkich trzech pakietów. Więc zmieniasz A i B, aby polegać na "C": "2.2". Dopóki oba mogą pracować z 2.2 ... –

Odpowiedz

3

To jest hack, ale prawdopodobnie pozwoli Ci iść do przodu.

Można nadpisywać repozytoria dla pakietów "A", "B" i "C" i sprawiać, że "A" i "B" polegać będą na tej samej wersji "C" (w rzeczywistości może to oznaczać, że wystarczy nadpisać repozytoria tylko dla "A" i "B").

Powinno to działać tak długo, jak "A" i "B" mogą działać z najnowszą wersją "C" (więc prawdopodobnie opiekun nie zaktualizował wersji pakietu). W takim przypadku rozważam wysłanie żądania wycofania do projektu, który ma starszą wersję zależności.

+0

Dlaczego kompozytor nie pozwala, aby pakiet A i pakiet B były zależne od różnych wersji tego samego pakietu. NPM jest w stanie to zrobić: http://blog.timoxley.com/post/20772365842/node-js-npm-reducing-dependency-overheads Potrzebują one tylko jakiejś zagnieżdżonej struktury dostawcy! – CMCDragonkai

+1

Czy jesteś w stanie podać przykład wewnątrz pliku composer.json, w jaki sposób zastąpić repozytoria, aby rozwiązać konflikt zależności? – CMCDragonkai

-1

Omawiamy je w tej listy: http://news.php.net/php.internals/72594

„No-konflikt” technika muszą zostać wdrożone w PHP, nie jest to kompozytor przyczepić

+1

Twierdzę, że jest to konceptualny problem rozdzielenia zarządzania zależnościami i braku kontekstu podczas automatycznego ładowania twoich bibliotek. Nawet jeśli php zapewniłoby łatwy sposób włączenia tej samej biblioteki z różnymi wersjami w tym samym żądaniu (na przykład program ładujący komponent wyeksportowałby wersję do oddzielnych przestrzeni nazw), nadal musiałbyś w jakiś sposób mapować połączenia z twoich bibliotek do odpowiednia wersja zależności. – Tyrael

+0

@Tyrael To wydaje się drobnym problemem; możesz alias głównej przestrzeni nazw pakietu, tak aby FQNS zawierał wersję pakietu, ale jest odwoływany w normalny sposób. na przykład /Vendor/Package/1.0.0/ jest aliased jako/Vendor/Package /; choć myślę, że musiałbyś ograniczyć zmiany wersji, które są instalowane niezależnie, z mniejszymi wersjami po prostu nadpisując istniejące. – Marvin

Powiązane problemy