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.