Jakie są różnice między composer update
i composer install
?
Jakie są różnice między composer update
i 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.1
wersję pakietu, uruchomienie composer update
spowoduje aktualizację tego pakietu (na przykład do0.9.2
, jeśli został już wydany)
szczegółowo composer update
:
composer.json
composer.json
composer.lock
aby przechowywać wersję zainstalowanych pakietówinstalacja kompozytora
composer install
niczego nie zaktualizuje; po prostu zainstaluje wszystkie zależności określone w composer.lock
pliku
Szczegółowo:
composer.lock
plik istnieje (jeśli nie, uruchom go composer-update
i utwórz)composer.lock
plikcomposer.lock
plikuKiedy instalować i kiedy aktualizować
composer update
jest najczęściej używany w `` fazie rozwoju '', aby zaktualizować nasze pakiety projektów zgodnie z tym, co określono w composer.json
pliku,
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 update
aktualizuje zależności w twoim globalnym repozytorium w systemie lokalnym ( COMPOSER_HOME
zmienna env)
composer update
w systemie lokalnym i przetestować aplikację, a następnie załadować plik composer.lock na serwerze produkcyjnym i uruchomićcomposer install
Po uruchomieniu composer install
szuka 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 update
po prostu czyta composer.json
, instaluje zależności i aktualizuje plik blokujący (lub tworzy nowy plik blokujący).
composer install
composer.lock
istnieje.
composer.lock
pliku.composer.lock
nie nie istnieje.
composer.json
.composer.lock
plik na podstawie zainstalowanych pakietów.Jak na composer help install
::
Polecenie install odczytuje
composer.lock
plik 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.json
i zrobi to samo.
composer update
composer.json
pliku (instaluje, aktualizuje i usuwa).composer.lock
plik zgodnie ze zmianami.Jak na composer help update
::
Polecenie update odczytuje
composer.json
plik 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 update
acomposer 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.lock
i composer.json
jest zależność "monolog/monolog": "1.0.*"
lub "monolog/monolog": "^1.0"
.
Wtedy będzie miał kilka przypadków
composer install
w innym czasie.A co, jeśli zawsze używamy wersji EXACT w composer.json
np. "monolog/monolog": "1.0.1"
?
Nadal potrzebujemy, composer.lock
ponieważ 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.lock
na 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.