Jak zaktualizować pojedynczą bibliotekę za pomocą Composer?

311

Muszę zainstalować tylko 1 pakiet dla mojej dystrybucji SF2 (DoctrineFixtures).

Kiedy biegnę

php composer.phar update

dostaję

  - Updating twig/twig (dev-master 39d94fa => v1.13.0)
    The package has modified files:
    M CHANGELOG
    M doc/filters/batch.test
    M doc/filters/index.rst
    M doc/filters/url_encode.rst
    M doc/functions/index.rst
    M doc/tags/index.rst
    M doc/tests/index.rst
    M lib/Twig/Autoloader.php
    M lib/Twig/Compiler.php
    M lib/Twig/CompilerInterface.php
-10 more files modified, choose "v" to view the full list

Wygląda na to, że ostatni programista dokonał edycji wielu plików wewnątrz dostawcy.

Aby obejść ten problem, próbowałem

php composer.phar update <package_name>

Ale to nie działa. Jak mogę zaktualizować / zainstalować tylko jedną bibliotekę z composer.json?

Narzędzie
źródło
Używasz właściwego polecenia. Czy możesz nam pokazać swoje composer.json?
cheesemacfly
proszę spróbować z poleceniami podanymi w mojej odpowiedzi, w przeciwnym razie proszę podać opis otrzymanego błędu (tj. wyjście kompozytora, jeśli kompozytor narzeka)
Nicolai Fröhlich
Plik composer.json może odnosić się do alternatywnego rozwidlenia projektu.
iconoclast
Zaktualizowałem konkretną zależność w moim projekcie laravel i podałem konkretny komponent do zainstalowania jawnie: kompozytor zaktualizuj laravelcollective / html. To wydawało się działać.
marko

Odpowiedzi:

526

Aby zainstalować doctrine/doctrine-fixtures-bundlez wersją 2.1.*i minimalną stabilnością, @devużyj tego:

composer.phar require doctrine/doctrine-fixtures-bundle:2.1.*@dev

następnie, aby zaktualizować tylko ten pojedynczy pakiet:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
źródło
9
Może być pomocny: uruchomienie aktualizacji / instalacji z
opcją -vvv
1
A co jeśli wystąpią błędy w innych pakietach? (W moim przypadku instalacja zatrzymana).
Thomas Decaux,
2
Co z wymaganiem uruchamia aktualizację innego pakietu?
hakre
1
co dokładnie chciałbyś wiedzieć? czy możesz być bardziej szczegółowy? Czy chcesz wiedzieć, czy może się zdarzyć, że inny pakiet - jawnie requirewcześniej lub wcześniej pobrany jako zależność - zostanie automatycznie zaktualizowany po uruchomieniu composer require <package>:<version-constraint>@<stability-flag>polecenia?
Nicolai Fröhlich,
7
> composer.phar update doctrine / doctrine-fixtures-bundle to aktualizuje również wszystkie inne pakiety (((
podarok
184

Jeśli chcesz tylko zaktualizować kilka pakietów, a nie wszystkie, możesz je wymienić:

php composer.phar update vendor/package:2.* vendor/package2:dev-master

Możesz także użyć symboli wieloznacznych, aby zaktualizować kilka pakietów jednocześnie:

php composer.phar update vendor/*
  • --prefer-source : instaluj pakiety od sourcekiedy są dostępne.
  • --prefer-dist : instaluje pakiety od distkiedy są dostępne.
  • --ignore-platform-reqs : zignorować php, hhvm, lib-*a ext-*wymagania i wymusić instalację nawet jeśli lokalna maszyna nie spełnia tych. Zobacz takżeplatform opcję konfiguracji .
  • --dry-run : Symuluj polecenie bez robienia czegokolwiek.
  • --dev : instaluje pakiety wymienione w require-dev(jest to zachowanie domyślne).
  • --no-dev : Pomiń instalowanie pakietów wymienionych w require-dev. Generacja autoloadera pomija autoload-devreguły.
  • --no-autoloader : pomija generowanie autoloadera.
  • --no-scripts : pomija wykonywanie skryptów zdefiniowanych w composer.json.
  • --no-plugins : Wyłącza wtyczki.
  • --no-progress : Usuwa wyświetlanie postępu, które może zepsuć niektóre terminale lub skrypty, które nie obsługują znaków cofania.
  • --optimize-autoloader (-o) : Konwertuj automatyczne ładowanie PSR-0/4 na mapę klas, aby uzyskać szybszy autoloader. Jest to szczególnie zalecane w przypadku produkcji, ale uruchomienie może zająć trochę czasu, więc obecnie nie jest domyślnie wykonywane.
  • --lock : aktualizuje tylko skrót pliku blokady, aby ukryć ostrzeżenie o nieaktualnym pliku blokady.
  • --with-dependencies : Dodaj również wszystkie zależności z pakietów z białej listy do białej listy.
  • --prefer-stable : Preferuj stabilne wersje zależności.
  • --prefer-najniższą : Preferuj najniższe wersje zależności. Przydatny do testowania minimalnych wersji wymagań, zwykle używanych z --prefer-stable.
Yosvel Quintero Arguelles
źródło
Należy pamiętać, że użytkownicy ZSH mogą potrzebować zawijać swoje vendor/*znaki w cudzysłowie:composer update "vendor/*"
ZeroThe2nd
51

Różnica między instalacją, aktualizacją i wymaganiem

Załóżmy następujący scenariusz:

composer.json

"parsecsv/php-parsecsv": "0.*"

plik composer.lock

  "name": "parsecsv/php-parsecsv",
            "version": "0.1.4",

Najnowsza wersja to 1.1.0. Najnowsza 0.*wersja to0.3.2

zainstalować: composer install parsecsv/php-parsecsv

Spowoduje to zainstalowanie wersji 0.1.4określonej w pliku blokady

aktualizacja: composer update parsecsv/php-parsecsv

Spowoduje to zaktualizowanie pakietu do 0.3.2. Najwyższa wersja w odniesieniu do twojego composer.json. Wpis composer.lockzostanie zaktualizowany.

wymagać: composer require parsecsv/php-parsecsv

Spowoduje to zaktualizowanie lub zainstalowanie najnowszej wersji 1.1.0. Twój composer.lockplik i composer.jsonplik również zostaną zaktualizowane.

Adam
źródło
niesamowite, więc aby odświeżyć jeden pakiet w ograniczonej wersji, to composer update author/packagei wtedycomposer install author/package
William Randokun
@WilliamRandokun, jeśli już go zainstalowałeś, composer update packagewystarczy, że nie musisz wywoływać instalacji po nim
Adam
1
dokładnie to, czego szukam. dobrze wyjaśnione. upvoted
kapitan
14

Możesz po prostu wykonać jedną z poniższych czynności, aby zainstalować nowy pakiet.

php composer.phar require

następnie terminal poprosi o podanie nazwy pakietu do przeszukania.

$ Search for a package []: //Your package name here

Następnie terminal zapyta o wersję pakietu (jeśli chcesz mieć najnowszą wersję, zostaw ją pustą)

$ Enter the version constraint to require (or leave blank to use the latest version) []: //your version number here

Następnie wystarczy nacisnąć klawisz powrotu. Terminal poprosi o kolejny pakiet, jeśli nie chcesz instalować innego, po prostu naciśnij klawisz powrotu i gotowe.

orhankutlu
źródło
6

Możesz użyć następującego polecenia, aby zaktualizować dowolny moduł z jego zależnościami

composer update vendor-name/module-name --with-dependencies
Wolfack
źródło
5

Aby upewnić się, że kompozytor zaktualizuje jeden pakiet już zainstalowany do ostatniej wersji w ramach ograniczeń wersji ustawionych w pliku composer.json, usuń pakiet od dostawcy, a następnie uruchom:

php composer.phar update vendor/package
Tsounabe
źródło
4
Ta sama sugestia znajdziesz w tym poście: github.com/composer/composer/issues/3112 . PS: Głosowanie w dół bez wyjaśnienia jest takie łatwe i tak bezużyteczne.
Tsounabe
5

Po prostu użyj

composer require {package/packagename}

lubić

composer require phpmailer/phpmailer

jeśli pakiet nie znajduje się w folderze dostawcy .. kompozytor zainstaluj go, a jeśli pakiet istnieje, zaktualizuj pakiet kompozytora do ostatniej wersji.

Mostafa
źródło
2

Ponieważ chciałeś zainstalować konkretny pakiet „Muszę zainstalować tylko 1 pakiet dla mojej dystrybucji SF2 (DoctrineFixtures)”.

php composer.phar require package/package-name:package-version powinno wystarczyć

The Anh
źródło