Jakie są różnice między aktualizacją kompozytora a instalacją kompozytora?

159

Jakie są różnice między composer updatei composer install?

Dawlatzai Ghousi
źródło

Odpowiedzi:

296

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:

  • Czytać composer.json
  • Usuń zainstalowane pakiety, które nie są już potrzebne w programie composer.json
  • Sprawdź dostępność najnowszych wersji wymaganych pakietów
  • Zainstaluj najnowsze wersje swoich pakietów
  • Zaktualizuj, composer.lockaby przechowywać wersję zainstalowanych pakietów

instalacja kompozytora

composer installniczego nie zaktualizuje; po prostu zainstaluje wszystkie zależności określone w composer.lockpliku

Szczegółowo:

  • Sprawdź, czy composer.lockplik istnieje (jeśli nie, uruchom go composer-updatei utwórz)
  • Przeczytaj composer.lockplik
  • Zainstaluj pakiety określone w composer.lockpliku

Kiedy 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.

Moppo
źródło
5
Nie opisałeś, co się stanie, jeśli nie będziemy mieć pliku blokady i wywołamy instalację Composera. Przy okazji ładny opis.
user1954544
1
Ważna rzecz, która może Cię kiedyś ugryźć - plik blokady nie jest rekursywny. Jeśli jakiś pakiet ma luźno zdefiniowane zależności i jeśli zdarzy ci się pobrać czystą kopię projektu na czystą maszynę, może zainstalować różne wersje zagnieżdżonych zależności, które mogą zawierać nowe błędy lub nawet przełomowe zmiany! Szczególnie istotne w przypadku ciągłej integracji i kompilacji serwerów. Rozwiązanie - poszukaj zagnieżdżonego pakietu powodującego problem i dodaj jego poprawioną dobrą wersję do pliku json i lock.
JustAMartin,
i composer global updateaktualizuje zależności w twoim globalnym repozytorium w systemie lokalnym ( COMPOSER_HOMEzmienna env)
Yousha Aleayoub
1
Jak więc mogę bezpiecznie zaktualizować określony pakiet na serwerze produkcyjnym?
Michel
@Michel Najpierw należy uruchomić composer updatew systemie lokalnym i przetestować aplikację, a następnie załadować plik composer.lock na serwerze produkcyjnym i uruchomićcomposer install
Amin Shojaei,
58

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).

Tim Sheehan
źródło
23

composer install

  1. Jeśli composer.lockistnieje.
    • Przetwarza i instaluje zależności z composer.lockpliku.
  2. Jeśli composer.locknie nie istnieje.
    • Proces instalacji pakietu z composer.json.
    • Tworzy 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 update

  1. Przetwarza zależności z composer.jsonpliku (instaluje, aktualizuje i usuwa).
  2. Tworzy lub aktualizuje 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

kenorb
źródło
punkt 3 instalacji Composera nie ma sensu. Jeśli plik .lock już istnieje, po prostu go przeczyta i nigdy go nie „zaktualizuje”. Jest tworzony tylko wtedy, gdy jeszcze nie istnieje ...
Ben
@Ben Wyjaśniłem punkty, daj mi znać, czy mają teraz sens.
kenorb
3

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

  • W przeciwnym razie przeczytaj plik composer.json, aby sprawdzić, jakie zależności należy zainstalować
  • Napisz plik composer.lock z informacjami o projekcie (zainstalowane zależności)

Ż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

  • Plik composer.lock zostanie zignorowany
  • Zależności pliku composer.json zostaną zainstalowane i zaktualizowane (jeśli zależność nie jest zainstalowana, zostanie pobrana)

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

  • Plik composer.json zostanie automatycznie zmodyfikowany i zostanie dodana nowa zależność
  • zależność zostanie pobrana do projektu

kompozytor usunąć

Jeśli chcesz usunąć nieużywaną zależność, wykonamy po prostu:

composer remove twig/twig --update-with-dependencies

  • Twig zostanie usunięty wraz ze wszystkimi jego zależnościami
Mayank Dudakiya
źródło
1

instalacja kompozytora

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
}

aktualizacja kompozytora

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

  • Dziś działamy dobrze z aktualną wersją zależności (np .: 1.0.0), ale kilka miesięcy później aktualizacja zależności (np .: 1.0.1) i możliwe, że jest jakiś błąd
  • Inny członek zespołu może mieć inną wersję zależności, jeśli działa 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.

Phan Van Linh
źródło