Come aggiornare una singola libreria con Composer?


312

Devo installare solo 1 pacchetto per la mia distribuzione SF2 (DoctrineFixtures).

Quando corro

php composer.phar update

ottengo

  - 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

Sembra che l'ultimo sviluppatore abbia modificato molti file all'interno del fornitore.

Per aggirare questo, ho provato

php composer.phar update <package_name>

Ma questo non sembra funzionare. Come posso aggiornare / installare solo una libreria da composer.json?


Stai usando il comando giusto. Puoi mostrarci il tuo composer.json?
cheesemacfly,

prova con i comandi forniti nella mia risposta, altrimenti fornisci una descrizione dell'errore che ricevi (es. uscita del compositore se il compositore si lamenta)
Nicolai Fröhlich

Il tuo composer.json potrebbe riferirsi a un fork alternativo di un progetto.
iconoclasta il

Ho aggiornato una dipendenza specifica nel mio progetto laravel e specificando il componente specifico da installare esplicitamente: aggiornamento del compositore laravelcollective / html. Sembrava funzionare.
marko,

Risposte:


527

Per installare doctrine/doctrine-fixtures-bundlecon versione 2.1.*e stabilità minima @devutilizzare questo:

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

quindi per aggiornare solo questo singolo pacchetto:

composer.phar update doctrine/doctrine-fixtures-bundle

9
Può essere utile: eseguire update / install con -vvv (modalità dettagliata: aggiornamento composer.phar-pacchetto / pacchetto -vvv) a volte può essere migliore in quanto a volte appare un prompt interattivo che potrebbe essere altrimenti nascosto
timhc22

1
Che dire se ci sono errori su altri pacchetti? (Nel mio caso l'installazione si è interrotta).
Thomas Decaux,

2
Che dire del requisito innesca un aggiornamento di un pacchetto diverso?
Hakre,

1
cosa vorresti sapere esattamente? puoi essere più specifico per favore? Vuoi sapere se potrebbe accadere che un altro pacchetto - esplicitamente requireprima o precedentemente scaricato come dipendenza - venga automaticamente aggiornato quando si esegue il composer require <package>:<version-constraint>@<stability-flag>comando?
Nicolai Fröhlich,

7
> composer.phar update dottrine / doctrine-fixtures-bundle aggiorna anche tutti gli altri pacchetti ((((
podarok

184

Se vuoi solo aggiornare alcuni pacchetti e non tutti, puoi elencarli come tali:

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

Puoi anche usare i caratteri jolly per aggiornare un sacco di pacchetti contemporaneamente:

php composer.phar update vendor/*
  • --prefer-source : installa i pacchetti da sourcequando disponibili.
  • --prefer-dist : installa i pacchetti da distquando disponibili.
  • --ignore-piattaforma-reqs : ignorano php, hhvm, lib-*e ext-*requisiti e forzare l'installazione, anche se la macchina locale non soddisfa questi. Vedi anche l' platform opzione di configurazione .
  • --dry-run : simula il comando senza fare nulla.
  • --dev : installa i pacchetti elencati in require-dev(questo è il comportamento predefinito).
  • --no-dev : salta l'installazione dei pacchetti elencati in require-dev. La generazione del caricatore automatico salta le autoload-devregole.
  • --no-autoloader : salta la generazione del caricatore automatico.
  • --no-scripts : salta l'esecuzione degli script definiti in composer.json.
  • --no-plugins : disabilita i plugin.
  • --no-progress : rimuove la schermata di avanzamento che può interferire con alcuni terminali o script che non gestiscono i caratteri backspace.
  • --optimize-autoloader (-o) : converte il caricamento automatico PSR-0/4 in classmap per ottenere un caricatore automatico più veloce. Questo è consigliato soprattutto per la produzione, ma può richiedere un po 'di tempo per essere eseguito, quindi al momento non viene eseguito per impostazione predefinita.
  • --lock : aggiorna solo l'hash del file di blocco per eliminare l'avvertenza in merito al file di blocco non aggiornato.
  • --with-dependencies : aggiunge anche tutte le dipendenze dei pacchetti nella whitelist alla whitelist.
  • --prefer-stable : preferisce le versioni stabili delle dipendenze.
  • --prefer-lower : preferisce le versioni più basse di dipendenze. Utile per testare versioni minime di requisiti, generalmente utilizzate con --prefer-stable.

Si noti che gli utenti ZSH potrebbero dover racchiudere le vendor/*virgolette:composer update "vendor/*"
ZeroThe2nd

51

Differenza tra installazione, aggiornamento e richiesta

Supponiamo il seguente scenario:

composer.json

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

file composer.lock

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

L'ultima versione è 1.1.0. L'ultima 0.*versione è0.3.2

installare: composer install parsecsv/php-parsecsv

Questo installerà la versione 0.1.4come specificato nel file di blocco

aggiornare: composer update parsecsv/php-parsecsv

Questo aggiornerà il pacchetto a 0.3.2 . La versione più alta rispetto al tuo compositore. L'iscrizione composer.lockverrà aggiornata.

richiedono: composer require parsecsv/php-parsecsv

Ciò aggiornerà o installerà la versione più recente 1.1.0. Anche il composer.lockfile e il composer.jsonfile verranno aggiornati.


fantastico, quindi per aggiornare un pacchetto all'interno della versione vincolata è composer update author/packagee poicomposer install author/package
William Randokun

@WilliamRandokun se l'hai già installato prima, allora composer update packageè sufficiente, non è necessario chiamare install dopo di esso
Adam

1
esattamente quello che sto cercando. ben spiegato. upvoted
Kapitan,

15

Fondamentalmente puoi fare quello che segue per installare anche il nuovo pacchetto.

php composer.phar require

quindi il terminale ti chiederà di inserire il nome del pacchetto per la ricerca.

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

Quindi il terminale chiederà la versione del pacchetto (se desideri avere l'ultima versione, lasciala vuota)

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

Quindi basta premere il tasto Invio. Il terminale chiederà un altro pacchetto, se non si desidera installarne un altro basta premere il tasto Invio e il gioco è fatto.


6

È possibile utilizzare il comando seguente per aggiornare qualsiasi modulo con le sue dipendenze

composer update vendor-name/module-name --with-dependencies

5

Per assicurarsi che il compositore aggiorni un pacchetto già installato all'ultima versione entro i vincoli di versione impostati in composer.json rimuovete il pacchetto dal fornitore e quindi eseguite:

php composer.phar update vendor/package

4
Troverai lo stesso suggerimento in questo post: github.com/composer/composer/issues/3112 . PS: votare verso il basso senza spiegazioni è così facile da fare e così inutile.
Tsounabe,

5

Basta usare

composer require {package/packagename}

piace

composer require phpmailer/phpmailer

se il pacchetto non è nella cartella del fornitore .. compositore lo installa e se il pacchetto esiste compositore aggiorna il pacchetto all'ultima versione.


2

Perché volevi installare un pacchetto specifico "Devo installare solo 1 pacchetto per la mia distribuzione SF2 (DoctrineFixtures)."

php composer.phar require package/package-name:package-version sarebbe abbastanza

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.