Jakie są różnice między composer updatei composer install?
Jakie są różnice między composer updatei composer install?
Odpowiedzi:
aktualizacja kompozytora
composer update zaktualizuje twoje zależności, tak jak są one określone w composer.json
Na przykład, jeśli potrzebujesz tego pakietu jako zależności:
"mockery/mockery": "0.9.*",
i faktycznie zainstalowałeś 0.9.1wersję pakietu, uruchomienie composer updatespowoduje aktualizację tego pakietu (na przykład do0.9.2 , jeśli został już wydany)
szczegółowo composer update:
composer.jsoncomposer.jsoncomposer.lockaby przechowywać wersję zainstalowanych pakietówinstalacja kompozytora
composer installniczego nie zaktualizuje; po prostu zainstaluje wszystkie zależności określone w composer.lockpliku
Szczegółowo:
composer.lockplik istnieje (jeśli nie, uruchom go composer-updatei utwórz)composer.lockplikcomposer.lockplikuKiedy instalować i kiedy aktualizować
composer updatejest najczęściej używany w `` fazie rozwoju '', aby zaktualizować nasze pakiety projektów zgodnie z tym, co określono w composer.jsonpliku,
composer install jest używany głównie w „fazie wdrażania” do zainstalowania naszej aplikacji na serwerze produkcyjnym lub w środowisku testowym, przy użyciu tych samych zależności, które są zapisane w pliku composer.lock utworzonym przez aktualizację kompozytora.
composer global updateaktualizuje zależności w twoim globalnym repozytorium w systemie lokalnym ( COMPOSER_HOMEzmienna env)
composer updatew systemie lokalnym i przetestować aplikację, a następnie załadować plik composer.lock na serwerze produkcyjnym i uruchomićcomposer install
Po uruchomieniu composer installszuka pliku blokującego i instaluje wszystko, co jest w nim zawarte, jeśli nie może go znaleźć, odczyta composer.json, zainstaluje zależności i wygeneruje plik blokujący.
Po uruchomieniu composer updatepo prostu czyta composer.json, instaluje zależności i aktualizuje plik blokujący (lub tworzy nowy plik blokujący).
composer installcomposer.lockistnieje.
composer.lockpliku.composer.locknie nie istnieje.
composer.json.composer.lockplik na podstawie zainstalowanych pakietów.Jak na composer help install::
Polecenie install odczytuje
composer.lockplik z bieżącego katalogu, przetwarza go oraz pobiera i instaluje wszystkie biblioteki i zależności opisane w tym pliku. Jeśli plik nie istnieje, będzie szukałcomposer.jsoni zrobi to samo.
composer updatecomposer.jsonpliku (instaluje, aktualizuje i usuwa).composer.lockplik zgodnie ze zmianami.Jak na composer help update::
Polecenie update odczytuje
composer.jsonplik z bieżącego katalogu, przetwarza go i aktualizuje, usuwa lub instaluje wszystkie zależności.
Zobacz też: Kompozytor: chodzi o plik blokady
Najlepsza różnica między composer updateacomposer install
instalacja kompozytora
Aby dodać zależności, musisz dodać je ręcznie do pliku composer.json.
Jeśli istnieje plik composer.lock, zainstaluj dokładnie to, co jest określone w tym pliku
Żaden komponent nie zostanie zaktualizowany za pomocą tego polecenia.
aktualizacja kompozytora
Aby dodać lub usunąć zależności, musisz dodać je ręcznie do pliku composer.json
Jeśli nie możesz (lub nie wiesz, jak dodać lub usunąć bibliotekę, co jest w rzeczywistości łatwe, po prostu dodaj nazwę zależności i wersję we właściwości require pliku) zmodyfikuj plik composer.json ręcznie lub wolę zamiast tego używać wiersza poleceń, kompozytor ma do tego specjalne funkcje:
kompozytor wymaga
Na przykład, jeśli chcemy dodać zależność z linią poleceń, po prostu wykonamy
composer require twig/twig
kompozytor usunąć
Jeśli chcesz usunąć nieużywaną zależność, wykonamy po prostu:
composer remove twig/twig --update-with-dependencies
if(composer.lock existed){
installs dependency with EXACT version in composer.lock file
} else {
installs dependency with LATEST version in composer.json
generate the composer.lock file
}
composer update = remove composer.lock -> composer install
Dlaczego potrzebujemy 2 poleceń. Myślę, że można to wyjaśnić przez composer.lock.
Wyobraź sobie, że NIE mamy composer.locki composer.jsonjest zależność "monolog/monolog": "1.0.*"lub "monolog/monolog": "^1.0".
Wtedy będzie miał kilka przypadków
composer installw innym czasie.A co, jeśli zawsze używamy wersji EXACT w composer.jsonnp. "monolog/monolog": "1.0.1"?
Nadal potrzebujemy, composer.lockponieważ composer.jsonśledzimy tylko główną wersję twojej zależności, nie może śledzić wersji zależności zależności.
A co, jeśli wszystkie zależności zależności również używają wersji EXACT?
Wyobraź sobie, że zaczynasz od WSZYSTKICH zależności, które używają wersji DOKŁADNEJ, więc nie dbasz o to composer.lock. Jednak kilka miesięcy później dodajesz nową zależność (lub aktualizujesz starą zależność), a zależności tej zależności nie używają wersji EXACT. Wtedy lepiej composer.lockna początku uważać .
Poza tym istnieje przewaga wersji semantycznej nad dokładną wersją. Możemy aktualizować zależność wiele razy podczas programowania, a biblioteka często zawiera drobne zmiany, takie jak naprawa błędów. Wtedy łatwiej jest zaktualizować zależność, która używa wersji semantycznej.