Nie ma na to dokładnej odpowiedzi.
Ogólnie rzecz biorąc, kompozytor nie powinien robić tego, co powinien robić system kompilacji i nie powinieneś umieszczać pliku composer.lock w VCS. Kompozytor może dziwnie mieć to do tyłu. Użytkownicy końcowi zamiast produkować nie powinni używać plików blokujących. Zwykle system kompilacji przechowuje za każdym razem migawki, katalogi wielokrotnego użytku itp. Zamiast pustego katalogu. Ludzie pobierający bibliotekę lib od kompozytora mogą chcieć, aby ta biblioteka korzystała z blokady, aby przetestować zależności, na które ładowane są biblioteki lib.
Z drugiej strony, co znacznie zwiększa obciążenie związane z zarządzaniem wersjami, gdzie prawie na pewno chcesz wielu wersji każdej biblioteki, ponieważ zależności będą ściśle zablokowane. Jeśli każda biblioteka prawdopodobnie będzie miała nieco inną wersję, potrzebujesz obsługi wielu wersji biblioteki i możesz szybko zobaczyć rozmiar potrzebnych zależności, dlatego radzę, aby pozostać na liście.
Biorąc to pod uwagę, naprawdę nie uważam, aby pliki blokujące były przydatne w bibliotekach lub w twoich katalogach roboczych. Używam go wyłącznie na mojej platformie kompilacji / testowania, która utrzymuje wszelkie zasoby pozyskane zewnętrznie, aktualizując je tylko na żądanie, zapewniając powtarzalne kompilacje do testowania, kompilacji i wdrażania. Chociaż można to zachować w VCS, nie zawsze jest ono przechowywane z drzewem źródłowym, drzewa kompilacji będą albo w innym miejscu w strukturze VCS, albo będą zarządzane przez inny system gdzieś indziej. Jeśli jest przechowywany w VCS, można dyskutować, czy zachować go w tym samym repozytorium co drzewa źródłowe, ponieważ w przeciwnym razie każde ściągnięcie może przynieść masę zasobów do kompilacji. Bardzo lubię mieć wszystko w dobrze zaaranżowanym repozytorium, z wyjątkiem poświadczeń produkcyjnych i wrażliwych oraz wzdęć.
SVN może to zrobić lepiej niż git, ponieważ nie zmusza cię do przejęcia całego repo (choć podejrzewam, że tak naprawdę nie jest to absolutnie potrzebne dla git, ale obsługa tego jest ograniczona i nie jest powszechnie używana). Proste repozytorium kompilacji to zwykle tylko gałąź nakładki, do której scalasz / eksportujesz drzewo kompilacji. Niektóre osoby łączą zasoby zewnętrzne w swoim drzewie źródłowym lub oddzielają dalej zewnętrzne, kompilacyjne i źródłowe drzewa. Zwykle służy dwóm celom, buforowaniu kompilacji i powtarzalnym kompilacjom, ale czasami utrzymanie go osobno na przynajmniej pewnym poziomie pozwala również na łatwe budowanie nowych / pustych i wielu kompilacji.
Jest na to wiele strategii i żadna z nich nie działa szczególnie dobrze z utrzymywaniem listy źródeł, chyba że trzymasz źródło zewnętrzne w drzewie źródeł.
Mają też takie rzeczy jak skróty w pliku, jak to się łączy, gdy dwie osoby aktualizują pakiety? Już samo to powinno sprawić, że pomyślisz, że to może być źle zrozumiane.
Argumenty, które ludzie przedstawiają dla plików blokujących, to przypadki, w których przyjęli bardzo konkretny i restrykcyjny pogląd na problem. Chcesz powtarzalne i spójne wersje? Dołącz folder dostawcy do VCS. Następnie przyspieszasz pobieranie zasobów, a także nie musisz polegać na potencjalnie uszkodzonych zasobach zewnętrznych podczas kompilacji. Żaden z tworzonych i wdrażanych potoków nie wymaga dostępu zewnętrznego, chyba że jest to absolutnie konieczne. Jeśli musisz zaktualizować zasób zewnętrzny, jest to tylko raz. To, co kompozytor próbuje osiągnąć, ma sens dla systemu rozproszonego, z wyjątkiem tego, co wspomniano wcześniej, nie ma sensu, ponieważ skończyłoby się piekłem zależnym od biblioteki dla aktualizacji biblioteki z typowymi konfliktami i aktualizacjami tak powolnymi, jak najwolniejszy do aktualizacji pakiet.
Dodatkowo dokonuję szybkiej aktualizacji. Za każdym razem, gdy się rozwijam, aktualizuję i testuję wszystko. Jest bardzo małe okno, w którym może się zakraść znaczący dryf wersji. Również realistycznie, gdy utrzymywana jest wersja semantyczna, co zwykle jest dla kompozytora, nie należy przypuszczać, że ma tyle problemów ze zgodnością lub zepsucia.
W composer.json umieścisz wymagane pakiety i ich wersje. Możesz zablokować tam wersje. Jednak te pakiety mają również zależności z wersjami dynamicznymi, które nie będą blokowane przez composer.json (chociaż nie rozumiem, dlaczego nie możesz ich tam umieścić sam, jeśli chcesz, aby były one zablokowane), więc ktoś, kto uruchamia kompozytora, instaluje dostaje coś innego bez blokady. Nie zależy ci na tym zbyt wiele lub może cię to obchodzić, to zależy. Czy powinno cię to obchodzić? Prawdopodobnie przynajmniej trochę, by upewnić się, że zdajesz sobie z tego sprawę w każdej sytuacji i potencjalnym wpływie, ale może to nie stanowić problemu, jeśli zawsze masz czas, aby po prostu DRY uruchomić najpierw i naprawić wszystko, co zostało zaktualizowane.
Trudny kompozytor stara się czasem uniknąć, po prostu go nie ma, a kłopot związany z blokowaniem plików kompozytora jest znaczący. Nie mają absolutnie żadnego prawa do informowania użytkowników, co powinni robić, a czego nie powinni robić, w odniesieniu do zasobów kompilacyjnych i źródłowych (czy dołączyć do oddzielnych w VCS), ponieważ to nie jest ich sprawa, nie są szefem ciebie ani mnie. „Kompozytor mówi” nie jest autorytetem, nie jest twoim przełożonym ani nie daje nikomu żadnej przewagi w tym zakresie. Tylko Ty znasz swoją prawdziwą sytuację i co jest dla niej najlepsze. Mogą jednak zalecić domyślny sposób postępowania dla użytkowników, którzy nie rozumieją, jak działają rzeczy, w którym to przypadku możesz postąpić zgodnie z tym, ale osobiście nie sądzę, że „ jest prawdziwym substytutem wiedzy o tym, jak działają rzeczy i możliwości prawidłowego ćwiczenia wymagań. Ostatecznie ich odpowiedź na to pytanie jest najlepsza. Ludzie, którzy tworzą kompozytora, nie wiedzą, gdzie powinieneś przechowywać swojego kompozytora.lock, i nie powinni. Ich jedynym obowiązkiem jest powiedzieć ci, co to jest i co robi. Poza tym musisz zdecydować, co jest dla Ciebie najlepsze.
Utrzymywanie pliku blokady jest problematyczne dla użyteczności, ponieważ kompozytor jest bardzo skryty, czy używa blokady, czy JSON i nie zawsze dobrze jest używać obu razem. Jeśli uruchomisz instalację, użyje tylko pliku blokady, więc pojawi się, więc jeśli dodasz coś do pliku composer.json, to nie zostanie on zainstalowany, ponieważ nie ma go w twojej blokadzie. Nie jest wcale intuicyjne, jakie operacje naprawdę robią i co robią w odniesieniu do pliku json / lock, a czasem nawet nie wydają się mieć sensu (pomoc mówi, że install pobiera nazwę pakietu, ale przy próbie użycia go mówi nie ).
Aby zaktualizować blokadę lub zasadniczo zastosować zmiany z JSON, musisz użyć aktualizacji i możesz nie chcieć aktualizować wszystkiego. Blokada ma pierwszeństwo przy wyborze tego, co powinno zostać zainstalowane. Jeśli istnieje plik blokady, jest on używany. Możesz nieco ograniczyć aktualizację, ale system wciąż jest bałaganem.
Aktualizacja zajmuje wieki, mnóstwo pamięci RAM. Podejrzewam również, że jeśli wybierzesz projekt, który nie był dotykany przez jakiś czas, że wyglądał na podstawie jego wersji, których będzie więcej w miarę upływu czasu i prawdopodobnie nie robi tego skutecznie, co tylko go dusi.
Są bardzo podstępni, jeśli chodzi o tajne złożone polecenia, których nie można oczekiwać. Domyślnie polecenie usuwania kompozytora pojawia się na mapach do aktualizacji kompozytora i na przykład usuwania kompozytora.
Pytanie, które naprawdę musisz zadać, nie dotyczy tego, czy powinieneś zachować blokadę w swoim drzewie źródłowym, czy też powinieneś zachować ją gdzieś w jakiś sposób, czy nie, ale raczej powinieneś zapytać, co faktycznie robi, to możesz sam zdecydować kiedy musisz to utrwalić i gdzie.
Zwrócę uwagę, że posiadanie blokady jest wielką wygodą, gdy masz solidną zewnętrzną strategię trwałości zależności, ponieważ śledzi ona informacje przydatne do śledzenia (pochodzenia) i aktualizacji, ale jeśli nie to nie ma go tu ani nie ma. Nie jest to przydatne, gdy jest zmuszane do gardła jako obowiązkowa opcja, aby zanieczyścić drzewa źródłowe. Bardzo powszechną rzeczą jest znajdowanie w starszych kodach, w których ludzie wprowadzili wiele zmian w composer.json, które tak naprawdę nie zostały zastosowane i są zepsute, gdy ludzie próbują użyć kompozytora. Bez pliku composer.lock, bez problemu z desynchronizacją.