Mam projekt z kilkoma zależnościami i chciałbym zainstalować inny, ale chciałbym, aby pozostałe były takie, jakie są. Więc edytowałem composer.json
, ale jeśli uruchomię composer install
, otrzymam następujące dane wyjściowe:
Installing dependencies from lock file
Warning: The lock file is not up to date with the latest changes in composer.json. You may be getting outdated dependencies. Run update to update them.
Your requirements could not be resolved to an installable set of packages.
Problem 1
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- laravel/framework dev-master requires ext-mcrypt * -> the requested PHP extension mcrypt is missing from your system.
- Installation request for laravel/framework dev-master -> satisfiable by laravel/framework dev-master.
Przede wszystkim mam zainstalowany mcrypt, więc nie wiem, dlaczego na to narzeka.
Jak mogę zainstalować tę nową zależność?
Mój composer.json:
{
"require": {
"opauth/opauth": "*",
"opauth/facebook": "*",
"opauth/google": "*",
"opauth/twitter": "*",
"imagine/Imagine": "dev-develop",
"laravel/framework": "4.*",
"loic-sharma/profiler": "dev-master"
},
"autoload": {
"classmap": [
"app/libraries",
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/tests/TestCase.php"
]
},
"minimum-stability": "dev"
}
composer-php
dwoistość_
źródło
źródło
Odpowiedzi:
Aby zainstalować nowy pakiet i tylko to, masz dwie opcje:
Za pomocą
require
polecenia wystarczy uruchomić:Kompozytor odgadnie najlepsze ograniczenie wersji do użycia, zainstaluje pakiet i doda go
composer.lock
.Możesz również określić jawne ograniczenie wersji, uruchamiając:
-LUB-
Za pomocą
update
polecenia dodaj nowy pakiet ręczniecomposer.json
, a następnie uruchom:Jeśli kompozytor narzeka, stwierdzając: „Nie można rozwiązać wymagań dotyczących instalowalnego zestawu pakietów.” Można to rozwiązać, przekazując flagę
--with-dependencies
. Spowoduje to dodanie do białej listy wszystkich zależności pakietu, który próbujesz zainstalować / zaktualizować (ale żadnych innych zależności).Odnośnie problemów z pytającym z Laravelem i mcryptem: sprawdź, czy jest on poprawnie włączony w twoim CLI php.ini. Jeśli
php -m
nie ma na liście mcrypt, to go brakuje.Ważne: nie zapomnij podać
new/package
podczas używaniacomposer update
! Pominięcie tego argumentu spowoduje, że wszystkie zależności, a takżecomposer.lock
zostaną zaktualizowane.źródło
"new/package" : "*",
composer.json"require"
?Właściwie poprawne rozwiązanie to:
composer require vendor/package
Na podstawie dokumentacji CLI dla Composer :
Chociaż prawdą jest, że
composer update
instaluje nowe pakiety znalezione w composer.json, zaktualizuje również plik composer.lock i wszelkie zainstalowane pakiety zgodnie z dowolną logiką rozmytą (>
lub*
znakami po dwukropkach) znalezionymi w composer.json! Można tego uniknąć, używająccomposer update vendor/package
, ale nie polecam nawykania się, ponieważ jesteś jednym zapomnianym argumentem od potencjalnie zepsutego projektu…Zachowaj rozsądek i trzymaj się przy
composer require vendor/package
dodawaniu nowych zależności! 😉źródło
composer require
aktualizacji plik composer.lock?Mój przypadek użycia jest prostszy i pasuje do twojego tytułu, ale nie do dalszych szczegółów.
To znaczy, chcę zainstalować nowy pakiet, który nie jest jeszcze w moim pakiecie
composer.json
bez aktualizacji wszystkich innych pakietów.Rozwiązaniem jest tutaj
composer require x/y
źródło
W moim przypadku miałem repozytorium z:
.json
.lock
W międzyczasie A, B, C miały nowsze wersje w odniesieniu do momentu wygenerowania blokady.
Z jakiegoś powodu usunąłem „dostawców” i chciałem to zrobić,
composer install
a komunikat nie powiódł się:Próbowałem uruchomić rozwiązanie od Seldaek, wydając,
composer update vendorD/libraryD
ale kompozytor nalegał, aby zaktualizować więcej rzeczy, więc.lock
zbyt zmiany zobaczyły moje narzędzie git.Zastosowałem rozwiązanie:
vendors
katalog.VendorD/LibraryD
z.json
.composer install
..json
i pobierz go ponownie z repozytorium (odpowiednik ponownego dodania pliku, ale unikając potencjalnych zmian białych znaków).composer update vendorD/libraryD
Zainstalował bibliotekę, ale oprócz tego
git
diff pokazał mi, że.lock
tylko w jednym nowe elementy zostały dodane bez edycji pozostałych.(Thnx Seldaek dla wskaźnika;))
źródło
composer.lock
nigdy nie powinno być z radością usunięte i odbudowane..lock
jest ... do blokowania !! ; D - w przeciwnym razie plik blokady byłby bezużyteczny i nie zatwierdziłbyś go, albo w ogóle by nie istniał. Jeśli działasz w firmie zorientowanej na jakość i przebudowujesz i blokujesz z powiedzmy 1000 zależności, wszystkie one się zmienią, a ludzie QA przyjdą cię zabić hahaha.