W chwili pisania tego tekstu w 2013 roku był to jeden ze sposobów na zrobienie tego. Kompozytor dodał wsparcie dla lepszych sposobów: See @igorw „s odpowiedź
CZY MASZ REPOZYTORIUM?
Git, Mercurial i SVN są obsługiwane przez Composer.
CZY MASZ DOSTĘP DO REPOZYTORIUM?
Tak?
CZY REPOZYTOR MA JEST composer.json
PLIK
Jeśli masz repozytorium, możesz pisać do: Dodaj composer.json
plik lub napraw istniejący i NIE używaj poniższego rozwiązania.
Idź do @igorw „s odpowiedź
UŻYWAJ TYLKO JEŚLI NIE MASZ REPOZYTORIUM
LUB JEŚLI REPOZYTOR NIE MA composer.json
I NIE MOŻESZ GO DODAĆ
Spowoduje to przesłonięcie wszystkiego, co Composer może odczytać z oryginalnego repozytorium composer.json
, w tym zależności pakietu i automatycznego ładowania.
Używanie package
typu przeniesie ciężar prawidłowego zdefiniowania wszystkiego na Ciebie. Najłatwiejszym sposobem jest posiadaniecomposer.json
pliku w repozytorium i po prostu jego użycie.
To rozwiązanie jest naprawdę tylko w rzadkich przypadkach, gdy masz porzucone pobieranie ZIP, którego nie możesz zmienić, lub repozytorium, które możesz tylko czytać, ale nie jest już utrzymywane.
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer.json
, więc użyj repozytorium vcs. Twój przykład również przerywa automatyczne ładowanie i ignorujebranch-alias
.autoload
pola, nie zostanie ono uwzględnione. Zasadniczo musisz skopiować i wkleić wszystkie informacje zcomposer.json
do definicji repozytorium. Repozytorium VCS pobiera te informacje bezpośrednio z VCS. Korzyści z programubranch-alias
są wyjaśnione w dokumencie dotyczącym aliasów i poście na blogu, który napisałem .Ten pakiet jest faktycznie dostępny za pośrednictwem packagist . W tym przypadku nie potrzebujesz niestandardowej definicji repozytorium. Po prostu upewnij się, że dodajesz
require
(co jest zawsze potrzebne) z dopasowanym ograniczeniem wersji.Ogólnie, jeśli pakiet jest dostępny na packagist, nie dodawaj repozytorium VCS. To po prostu spowolni.
W przypadku pakietów, które nie są dostępne za pośrednictwem packagist, użyj repozytorium VCS (lub git), jak pokazano w pytaniu. Kiedy to zrobisz, upewnij się, że:
require
do paczki, o której mowarequire
dopasowaniach wersji udostępnionych przez repozytorium VCS. Możesz użyć,composer show <packagename>
aby znaleźć dostępne wersje. W tym przypadku~2.3
byłaby to dobra opcja.require
odpowiada nazwie w pilociecomposer.json
. W tym przypadku tak jestgedmo/doctrine-extensions
.Oto przykład,
composer.json
który instaluje ten sam pakiet za pośrednictwem repozytorium VCS:Dokumentacja repozytorium VCS wyjaśnia to wszystko całkiem dobrze.
Jeśli istnieje repozytorium git (lub innego VCS) z
composer.json
dostępnym repozytorium , nie używaj repozytorium „pakietowego”. Repozytoria pakietów wymagają podania wszystkich metadanych w definicji i całkowicie zignorują wszelkiecomposer.json
obecne w dostarczonym dyst i źródle. Mają też dodatkowe ograniczenia, takie jak w większości przypadków uniemożliwianie poprawnych aktualizacji.Unikaj repozytoriów pakietów ( zobacz także dokumentację ).
źródło
composer.json
.require
pole musi być określona.The VCS repo docs explain all of this quite well.
... co?Możesz dołączyć repozytorium git do pliku composer.json w następujący sposób:
źródło
composer.json
plik, jeśli to w ogóle możliwe.Po prostu powiedz kompozytorowi, aby użył źródła, jeśli jest dostępne:
Lub:
Następnie otrzymasz pakiety jako sklonowane repozytoria zamiast wyodrębnionych paczek, więc możesz wprowadzić pewne zmiany i zatwierdzić je z powrotem. Oczywiście zakładając, że masz uprawnienia do zapisu / wypychania w repozytorium, a Composer wie o repozytorium projektu.
Zastrzeżenie: Myślę, że mogę odpowiedzieć na trochę inne pytanie, ale właśnie tego szukałem, kiedy znalazłem to pytanie, więc mam nadzieję, że będzie przydatne również dla innych.
Jeśli Composer nie wie, gdzie jest repozytorium projektu, albo projekt nie ma odpowiedniego pliku composer.json, sytuacja jest nieco bardziej skomplikowana, ale inni odpowiedzieli już na takie scenariusze.
źródło
Wystąpił następujący błąd:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Jeśli rozwidlasz kolejne repozytorium, aby wprowadzić własne zmiany, otrzymasz nowe repozytorium.
Na przykład:
Nowy adres URL będzie musiał przejść do sekcji repozytoriów w pliku composer.json.
Pamiętaj, że jeśli chcesz odwołać się do forka, tak jak
my-foo/bar
w wymaganej sekcji, będziesz musiał zmienić nazwę pakietu wcomposer.json
pliku wewnątrz nowego repozytorium.Jeśli właśnie rozwidliłeś rozwidlenie, najłatwiej to zrobić, edytuj go bezpośrednio na githubie.
źródło
name
atrybucie wewnątrzcomposer.json
.W moim przypadku używam Symfony2.3.x i parametr minimum-stabilność jest domyślnie „stabilny” (co jest dobre). Chciałem zaimportować repozytorium nie z listy packagist, ale miałem ten sam problem: „Twoje wymagania nie mogą zostać rozwiązane na zestaw pakietów do zainstalowania”. Okazało się, że plik composer.json w repozytorium, które próbowałem zaimportować, używa „dev” o minimalnej stabilności.
Aby rozwiązać ten problem, nie zapomnij zweryfikować
minimum-stability
. Rozwiązałem to, wymagającdev-master
wersji zamiastmaster
określonej w tym poście .źródło
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Jeśli chcesz użyć
composer.json
z GitHub, spójrz na ten przykład (w sekcji VCS).Sekcja pakietu jest przeznaczona dla pakietów, które nie mają rozszerzenia
composer.json
. Jednak ty też nie poszedłeś za tym przykładem, bo też by się udało. Przeczytaj, co mówi o repozytoriach pakietów:źródło
Staram się dołączyć do wymienionych tutaj rozwiązań, ponieważ jest kilka ważnych punktów, które należy wymienić.
Jak wspomniano w odpowiedzi @ igorw, adres URL do repozytorium musi być w tym przypadku określony w pliku composer.json, jednak w obu przypadkach musi istnieć plik composer.json (w przeciwieństwie do drugiego sposobu @Mike Graf), aby opublikować go w Packagist niewiele się różni (ponadto Github obecnie dostarcza usługi związane z pakietami jako pakiety npm), jedyna różnica zamiast dosłownego wpisywania adresu URL w interfejsie packagist po zarejestrowaniu się.
Ponadto ma wadę polegającą na tym, że nie może polegać na zewnętrznej bibliotece, która używa tego podejścia, ponieważ definicje repozytoriów rekurencyjnych nie działają w programie Composer. Co więcej, z tego powodu wydaje się, że jest w nim "błąd", ponieważ definicja rekurencyjna zawiodła w zależności, ponowne określenie repozytoriów jawnie w katalogu głównym nie wydaje się wystarczające, ale także wszystkie zależności z pakietów musiałyby być uszanowany.
Z plikiem kompozytora (odpowiedź: 18 października 2012 o 15:13 igorw)
Bez pliku kompozytora (odpowiedź: 23 stycznia 2013 o 17:28 Mike Graf)
źródło