Quali sono le differenze tra l'aggiornamento del compositore e l'installazione del compositore?


Risposte:


297

aggiornamento del compositore

composer update aggiornerà le tue dipendenze come sono specificate in composer.json

Ad esempio, se si richiede questo pacchetto come dipendenza:

"mockery/mockery": "0.9.*",

e hai effettivamente installato la 0.9.1versione del pacchetto, l'esecuzione composer updatecauserà un aggiornamento di questo pacchetto (ad esempio 0.9.2, se è già stato rilasciato)

in dettaglio composer update:

  • Leggere composer.json
  • Rimuovere i pacchetti installati che non sono più richiesti in composer.json
  • Verifica la disponibilità delle ultime versioni dei pacchetti richiesti
  • Installa le ultime versioni dei tuoi pacchetti
  • Aggiornamento composer.lockper memorizzare la versione dei pacchetti installati

installazione del compositore

composer installnon aggiornerà nulla; installerà semplicemente tutte le dipendenze come specificato nel composer.lockfile

In dettaglio:

  • Controlla se il composer.lockfile esiste (in caso contrario, eseguilo composer-updatee crealo)
  • Leggi il composer.lockfile
  • Installa i pacchetti specificati nel composer.lockfile

Quando installare e quando aggiornare

  • composer updateviene utilizzato principalmente nella "fase di sviluppo", per aggiornare i nostri pacchetti di progetti in base a quanto specificato nel composer.jsonfile,

  • composer install viene utilizzato principalmente nella "fase di distribuzione" per installare la nostra applicazione su un server di produzione o in un ambiente di test, utilizzando le stesse dipendenze memorizzate nel file composer.lock creato dall'aggiornamento del compositore.


5
Non hai descritto cosa sarà se non disponiamo di un file di blocco e non chiamiamo l'installazione di compositore. Bella descrizione a proposito.
user1954544

1
Cosa importante che potrebbe morderti un giorno: il file di blocco non è ricorsivo. Se alcuni pacchetti hanno dipendenze vagamente definite e se ti capita di afferrare una copia pulita di un progetto su una macchina pulita, potrebbe installare diverse versioni di dipendenze nidificate, che potrebbero includere nuovi bug o addirittura interrompere modifiche! Particolarmente rilevante per l'integrazione continua e la creazione di server. La soluzione: cercare il pacchetto problematico nidificato e aggiungere la versione corretta corretta al file json e lock.
JustAMartin,

e composer global updateaggiorna le dipendenze nel tuo repository globale sul sistema locale ( COMPOSER_HOMEvariabile env)
Yousha Aleayoub,

1
Quindi, come posso aggiornare in sicurezza un pacchetto specifico su un server di produzione?
Michel,

@Michel Dovresti prima eseguire composer updatesul tuo sistema locale e testare la tua applicazione, quindi caricare il composer.lock sul tuo server di produzione ed eseguirecomposer install
Amin Shojaei il

58

Quando lo esegui composer installcercherà un file di blocco e installerà tutto ciò che è contenuto, se non riesce a trovarne uno, leggerà composer.json, installerà le sue dipendenze e genererà un file di blocco .

Quando lo esegui composer update, legge semplicemente composer.json, installa le dipendenze e aggiorna il file di blocco (o crea un nuovo file di blocco).


23

composer install

  1. Se composer.lockesiste.
    • Elabora e installa le dipendenze dal composer.lockfile.
  2. Se composer.locknon non esiste.
    • Installa il pacchetto di processo da composer.json.
    • Crea il composer.lockfile in base ai pacchetti installati.

Secondo composer help install::

Il comando install legge il composer.lockfile dalla directory corrente, lo elabora e scarica e installa tutte le librerie e le dipendenze descritte in quel file. Se il file non esiste, cercherà composer.jsone farà lo stesso.


composer update

  1. Elabora le dipendenze dal composer.jsonfile (installa, aggiorna e rimuove).
  2. Crea o aggiorna il composer.lockfile in base alle modifiche.

Secondo composer help update::

Il comando update legge il composer.jsonfile dalla directory corrente, lo elabora e aggiorna, rimuove o installa tutte le dipendenze.


Vedi anche: Compositore: è tutto sul file di blocco


il punto di installazione del compositore 3 non ha senso. Se il file .lock esiste già, lo leggerà e non lo "aggiornerà" mai. Viene creato solo se non esiste ancora ..
Ben

@ Ben ho chiarito i punti, fammi sapere se hanno senso ora.
Kenorb,

3

La migliore differenza tra composer updateecomposer install

installazione del compositore

Per aggiungere dipendenze è necessario aggiungerlo manualmente al file composer.json.

Se esiste il file composer.lock, installa esattamente ciò che è specifico su questo file

  • Altrimenti leggi il file composer.json per vedere quali dipendenze devono essere installate
  • Scrivi il compositore.lock con le informazioni del progetto (dipendenze installate)

Nessun componente verrà aggiornato con questo comando.

aggiornamento del compositore

Per aggiungere o rimuovere dipendenze è necessario aggiungerlo manualmente al file composer.json

  • Il file composer.lock verrà ignorato
  • Le dipendenze dei file composer.json verranno installate e aggiornate (se una dipendenza non è installata verrà scaricata)

Se non riesci (o non sai come aggiungere o rimuovere una libreria che è in effetti facile, basta aggiungere il nome della dipendenza e la versione nella proprietà request del file) modificare manualmente il file composer.json oppure tu preferisco usare la riga di comando, invece, il compositore ha funzioni speciali per questo:

compositore richiede

Ad esempio, se vogliamo aggiungere una dipendenza con la riga di comando, eseguiremo semplicemente

composer require twig/twig

  • Il file composer.json verrà modificato automaticamente e verrà aggiunta la nuova dipendenza
  • la dipendenza verrà scaricata nel progetto

il compositore rimuove

Se desideri rimuovere una dipendenza non utilizzata, eseguiremo semplicemente:

composer remove twig/twig --update-with-dependencies

  • Il ramoscello verrà rimosso con tutte le sue dipendenze

1

installazione del compositore

if(composer.lock existed){
   installs dependency with EXACT version in composer.lock file
} else {
   installs dependency with LATEST version in composer.json
   generate the composer.lock file
}

aggiornamento del compositore

composer update = remove composer.lock -> composer install

Perché abbiamo bisogno di 2 comandi. Penso che possa spiegare da compositore.lock.

Immagina, NON abbiamo composer.locke dentro composer.json, c'è una dipendenza "monolog/monolog": "1.0.*"o "monolog/monolog": "^1.0".
Quindi, avrà alcuni casi

  • Oggi stiamo lavorando bene con l'attuale versione di dipendenza (ad es. 1.0.0) ma pochi mesi dopo, l'aggiornamento di dipendenza (ad es .: 1.0.1) e potrebbe avere qualche bug
  • Un altro membro del team può avere una versione di dipendenza diversa se viene eseguita composer installin un altro momento.

Cosa succede se utilizziamo sempre una versione EXACT composer.jsoncome "monolog/monolog": "1.0.1"?
Ne abbiamo ancora bisogno composer.lockperché composer.jsontraccia solo la versione principale della tua dipendenza, non può tracciare la versione delle dipendenze della dipendenza.

Cosa succede se tutte le dipendenze della dipendenza utilizzano anche la versione EXACT?
Immagina di iniziare con TUTTE le dipendenze che utilizzano la versione EXACT, quindi non ti interessa composer.lock. Tuttavia, alcuni mesi dopo, si aggiunge una nuova dipendenza (o si aggiorna la vecchia dipendenza) e le dipendenze di questa dipendenza non utilizzano la versione EXACT. Quindi è meglio prendersi cura composer.lockall'inizio.

Oltre a ciò, c'è un vantaggio di una versione semantica rispetto a una versione esatta. Potremmo aggiornare la dipendenza molte volte durante lo sviluppo e la libreria presenta spesso alcune piccole modifiche come la correzione di bug. Quindi è più semplice aggiornare la dipendenza che utilizza la versione semantica.

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.