Wie aktualisiere ich eine einzelne Bibliothek mit Composer?

311

Ich muss nur 1 Paket für meine SF2-Distribution (DoctrineFixtures) installieren.

Wenn ich renne

php composer.phar update

Ich bekomme

  - 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

Es scheint, dass der letzte Entwickler viele Dateien innerhalb des Anbieters bearbeitet hat.

Um dies zu umgehen, habe ich es versucht

php composer.phar update <package_name>

Aber das scheint nicht zu funktionieren. Wie kann ich nur eine Bibliothek von composer.json aktualisieren / installieren?

Werkzeug
quelle
Sie verwenden den richtigen Befehl. Können Sie uns Ihre zeigen composer.json?
cheesemacfly
Bitte versuchen Sie es mit den Befehlen in meiner Antwort. Andernfalls geben Sie bitte eine Beschreibung des Fehlers an, den Sie erhalten (dh die Ausgabe des Komponisten, wenn sich der Komponist beschwert)
Nicolai Fröhlich
Ihre composer.json verweist möglicherweise auf eine alternative Abzweigung eines Projekts.
Bilderstürmer
Ich habe eine bestimmte Abhängigkeit in meinem Laravel-Projekt aktualisiert und die zu installierende Komponente explizit angegeben: Composer Update Laravelcollective / HTML. Das schien zu funktionieren.
Marko

Antworten:

526

Verwenden Sie Folgendes, um doctrine/doctrine-fixtures-bundlemit Version 2.1.*und minimaler Stabilität zu installieren @dev:

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

um dann nur dieses einzelne Paket zu aktualisieren:

composer.phar update doctrine/doctrine-fixtures-bundle
Nicolai Fröhlich
quelle
9
Kann hilfreich sein: Das Ausführen von update / install mit -vvv (ausführlicher Modus: composer.phar update -vvv package / package) kann manchmal besser sein, da gelegentlich eine interaktive Eingabeaufforderung angezeigt wird, die ansonsten möglicherweise ausgeblendet ist
timhc22
1
Was ist, wenn andere Pakete fehlerhaft sind? (In meinem Fall wurde die Installation gestoppt).
Thomas Decaux
2
Was ist mit der Anforderung, die ein Update eines anderen Pakets auslöst?
hakre
1
was genau möchtest du wissen Kannst du bitte genauer sein? Möchten Sie wissen, ob es passieren kann, dass ein anderes Paket - explizit requirevor oder zuvor als Abhängigkeit heruntergeladen - beim Ausführen des composer require <package>:<version-constraint>@<stability-flag>Befehls automatisch aktualisiert wird ?
Nicolai Fröhlich
7
> composer.phar Update Doctrine / Doctrine-Fixtures-Bundle Dies aktualisiert auch alle anderen Pakete (((
Podarok
184

Wenn Sie nur einige und nicht alle Pakete aktualisieren möchten, können Sie sie als solche auflisten:

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

Sie können auch Platzhalter verwenden, um mehrere Pakete gleichzeitig zu aktualisieren:

php composer.phar update vendor/*
  • --prefer-source : Installieren Sie Pakete ab dem sourceZeitpunkt, an dem sie verfügbar sind.
  • --prefer-dist : Installieren Sie Pakete ab dem distZeitpunkt, an dem sie verfügbar sind.
  • --ignore-Plattform-reqs : ignorieren php, hhvm, lib-*und ext-*Anforderungen und zwingt die Installation selbst wenn die lokale Maschine diese nicht erfüllt. Siehe auch die platform Konfigurationsoption .
  • --dry-run : Simuliert den Befehl, ohne etwas zu tun.
  • --dev : Installieren Sie die in aufgelisteten Pakete require-dev(dies ist das Standardverhalten).
  • --no-dev : Überspringen Sie die Installation der in aufgelisteten Pakete require-dev. Die Autoloader-Generation überspringt die autoload-devRegeln.
  • --no-autoloader : Überspringt die Autoloader-Generierung.
  • --no-scripts : Überspringt die Ausführung von in composer.json definierten Skripten.
  • --no-plugins : Deaktiviert Plugins.
  • --no-progress : Entfernt die Fortschrittsanzeige, die mit einigen Terminals oder Skripten, die keine Rücktaste verarbeiten, in Konflikt geraten kann.
  • --optimize-autoloader (-o) : Konvertiert das automatische Laden von PSR-0/4 in classmap, um einen schnelleren Autoloader zu erhalten. Dies wird insbesondere für die Produktion empfohlen, kann jedoch einige Zeit in Anspruch nehmen, sodass es derzeit nicht standardmäßig ausgeführt wird.
  • --lock : Aktualisiert nur den Hash der Sperrdatei, um die Warnung zu unterdrücken, dass die Sperrdatei veraltet ist.
  • --with-dependencies : Fügen Sie der Whitelist auch alle Abhängigkeiten von Whitelist-Paketen hinzu.
  • --prefer-stabile : Bevorzugen Sie stabile Versionen von Abhängigkeiten.
  • --prefer-low : Bevorzugen Sie niedrigste Versionen von Abhängigkeiten. Nützlich zum Testen von Mindestversionen von Anforderungen, die im Allgemeinen mit verwendet werden --prefer-stable.
Yosvel Quintero Arguelles
quelle
Bitte beachten Sie, dass ZSH-Benutzer möglicherweise ihre vendor/*Anführungszeichen setzen müssen:composer update "vendor/*"
ZeroThe2nd
51

Unterschied zwischen installieren, aktualisieren und erfordern

Nehmen Sie das folgende Szenario an:

composer.json

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

composer.lock-Datei

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

Neueste Version ist 1.1.0. Die neueste 0.*Version ist0.3.2

Installieren: composer install parsecsv/php-parsecsv

Dadurch wird 0.1.4die in der Sperrdatei angegebene Version installiert

aktualisieren: composer update parsecsv/php-parsecsv

Dadurch wird das Paket auf aktualisiert 0.3.2. Die höchste Version in Bezug auf Ihre composer.json. Der Eintrag in composer.lockwird aktualisiert.

benötigen: composer require parsecsv/php-parsecsv

Dadurch wird die neueste Version aktualisiert oder installiert 1.1.0. Ihre composer.lockDatei und composer.jsonDatei werden ebenfalls aktualisiert.

Adam
quelle
genial, also um ein Paket innerhalb der eingeschränkten Version composer update author/packagecomposer install author/package
William Randokun
@ WilliamRandokun, wenn Sie es zuvor installiert haben, dann ist gerade composer update packagegenug, keine Notwendigkeit, install danach aufzurufen
Adam
1
genau das, wonach ich suche. gut erklärt. upvoted
Kapitan
14

Grundsätzlich können Sie auch einem folgen, um ein neues Paket zu installieren.

php composer.phar require

Das Terminal fordert Sie dann auf, den Namen des Pakets für die Suche einzugeben.

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

Dann fragt das Terminal nach der Version des Pakets (Wenn Sie die neueste Version haben möchten, lassen Sie sie einfach leer).

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

Dann drücken Sie einfach die Eingabetaste. Das Terminal fragt nach einem anderen Paket. Wenn Sie kein weiteres installieren möchten, drücken Sie einfach die Eingabetaste und Sie sind fertig.

orhankutlu
quelle
6

Mit dem folgenden Befehl können Sie jedes Modul mit seinen Abhängigkeiten aktualisieren

composer update vendor-name/module-name --with-dependencies
Wolfack
quelle
5

Um sicherzustellen, dass Composer ein bereits installiertes Paket innerhalb der in composer.json festgelegten Versionsbeschränkungen auf die letzte Version aktualisiert, entfernen Sie das Paket vom Hersteller und führen Sie Folgendes aus:

php composer.phar update vendor/package
Tsounabe
quelle
4
Den gleichen Vorschlag finden Sie in diesem Beitrag: github.com/composer/composer/issues/3112 . PS: Eine Abstimmung ohne Erklärung ist so einfach und nutzlos.
Tsounabe
5

Benutz einfach

composer require {package/packagename}

mögen

composer require phpmailer/phpmailer

Wenn sich das Paket nicht im Herstellerordner befindet. Composer installiert es und wenn das Paket vorhanden ist, aktualisiert das Composer das Paket auf die letzte Version.

Mostafa
quelle
2

Weil Sie ein bestimmtes Paket installieren wollten "Ich muss nur 1 Paket für meine SF2-Distribution (DoctrineFixtures) installieren."

php composer.phar require package/package-name:package-version wäre genug

Die Anh
quelle