Se il lock c’è, install usa quelle versioni. Update risolve di nuovo e riscrive il lock. Upgrade è un alias, non un comando più prudente. --with, dice la nota, aggiorna tutti i pacchetti.
composer install non ricalcola le versioni se in cartella c’è già un composer.lock. composer update sì: risolve di nuovo e riscrive il lock. I due comandi non sono sinonimi, e upgrade non è un terzo comportamento: nel manuale è solo un alias di update. Rilettura del 15 ottobre 2026 su getcomposer.org, pagina CLI.
In breve: install legge composer.json, installa in vendor e, se il lock c’è, usa quelle versioni esatte. Update esiste proprio per ottenere le versioni più recenti consentite e per aggiornare il lock. --no-install ferma update prima della copia in vendor. Non è il pezzo su PHP 8.5 e 8.6: lì si parla del runtime, qui del file che inchioda le librerie.
Cosa trovi in questo articolo
Che cosa fa install
Nella documentazione CLI, voce install / i: il comando legge il composer.json della cartella corrente, risolve le dipendenze e le installa in vendor. Se nella stessa cartella c’è un composer.lock, usa le versioni esatte scritte lì invece di risolverle un’altra volta. La frase del manuale è netta: così chi usa la libreria ottiene le stesse versioni. Se il lock non c’è, Composer lo crea dopo la risoluzione.
Quindi un install su un repository che ha già il lock non è un «dammi l’ultima versione». È una ricostruzione di vendor a partire da un elenco già deciso. La scheda sta nel cluster Stack.
Che cosa fa update
La voce update / u / upgrade apre così: per avere le ultime versioni delle dipendenze e per aggiornare il composer.lock si usa update. Il comando è aliasato come upgrade perché, se si pensa ad apt-get o a un gestore simile, «upgrade» è il nome che ci si aspetta. Non è un comando apt. Fa la stessa cosa di update.
Senza argomenti, update risolve tutte le dipendenze del progetto e scrive le versioni esatte nel lock. L’opzione --no-install non esegue il passo di installazione dopo aver aggiornato il lock: il file cambia, vendor no. --no-dev salta i pacchetti di require-dev. Sono flag del manuale, non una policy aziendale.
Un pacchetto solo, e la trappola di --with
Per non toccare tutto l’albero si elencano i pacchetti: composer update vendor/package vendor/package2. Il manuale ammette anche una wildcard, composer update "vendor/*".
Per scendere a una versione precisa senza modificare il composer.json c’è --with, per esempio composer update --with vendor/package:2.0.1. La nota subito sotto dice che, con quella forma, tutti i pacchetti vengono aggiornati. Se si vuole limitare l’aggiornamento ai pacchetti di cui si passa il vincolo, il manuale dice di non usare --with e di usare la sintassi parziale: composer update vendor/package:2.0.1. Per un pacchetto che è anche in composer.json, quel vincolo temporaneo deve essere un sottoinsieme del vincolo già scritto. Il json non viene modificato.
| Comando | Lock | Che cosa non fa |
|---|---|---|
install con lock presente | Legge le versioni esatte | Non cerca una risoluzione nuova |
install senza lock | Lo crea dopo la risoluzione | Non è un update di un lock già in repo |
update | Risolve e riscrive | Non è un alias innocuo di install |
update --no-install | Riscrive il lock | Non copia i pacchetti in vendor |
update --with pkg:2.0.1 | Aggiorna tutti i pacchetti, dice la nota | Non è l’aggiornamento del solo pacchetto nominato |
Errori da evitare
Lanciare
updatesul server per «installare come in locale». Se il lock c’è già, il comando giusto per ricostruirevendorèinstall.Aspettarsi che
installporti le librerie all’ultima versione compatibile. Con il lock presente il manuale dice il contrario.Credere che
upgradesia più prudente diupdate. È lo stesso comando.Usare
--withper toccare un solo pacchetto. La nota dice che si aggiorna tutto. La forma parziale èupdate vendor/package:vincolo.Dare per modificato il
composer.jsondopo un vincolo temporaneo. Il manuale dice che non lo modifica, e che il vincolo deve restare dentro quello già dichiarato.
In sintesi
Il lock fermo si installa con install. Si ricalcola con update, che è anche upgrade. --no-install lascia il lock nuovo e vendor com’era. --with non è un aggiornamento chirurgico: la nota del manuale dice che partono tutti i pacchetti. Verifica del 15 ottobre 2026 sulla pagina CLI di getcomposer.org. Nessun numero di versione di Composer: quella pagina, in questa rilettura, non ne stampa uno da citare.
Copertina: NOIRLab/NSF/AURA/T. Slovinský, «NOIRLab HQ Server Racks», Wikimedia Commons, CC BY 4.0. È la sala macchine della sede NOIRLab a Tucson, non uno screenshot di Composer.