notiziephp.it

Laravel Vet: esamina il codice Composer prima che venga installato

Traduzione da Laravel News
15 Settembre 2026 Tempo di lettura: 5 minuti
Laravel Vet: esamina il codice Composer prima che venga installato

Laravel Vet è un nuovo package del team di Laravel che ti mostra il codice che composer update sta per scrivere nella tua directory vendor/ e registra i package di cui ti fidi in un file vet.json. Viene distribuito come plugin di Composer, quindi viene eseguito dopo ogni install e prima che ogni update scriva qualcosa.

Se conosci cargo vet dal mondo Rust, questa è la stessa idea applicata a Composer. In caso contrario, ecco il concetto in breve: ogni update porta nel tuo progetto nuovo codice che nessuno del tuo team ha letto. Vet ti mostra quel codice, un package alla volta, prima che venga inserito. Una volta che ti fidi di un package, vet se lo ricorda, così il prossimo update chiede solo cosa è cambiato.

Non devi leggere tutto da solo. Vet passa ogni modifica al coding agent già presente sulla tua macchina, come Claude Code, Codex, Gemini o opencode, e l'agent la legge al posto tuo e riporta: PASS, oppure FAIL con il file e il motivo. Tu leggi i FAIL, premi invio su tutto il resto e vai avanti con la tua giornata.

Una volta che ti fidi di un package, vet se lo ricorda, e il prossimo update chiede solo cosa è cambiato. Un package di cui nessuno si fida esce con uno status diverso da zero, ed è questo che lo rende utile in una build. Funziona con qualsiasi progetto che abbia un composer.json, quindi Laravel, Symfony, WordPress e PHP puro vanno tutti bene.

Come saprai, ogni update di Composer scrive migliaia di righe di codice che devi o verificare manualmente leggendo i diff oppure fidarti ciecamente di Packagist, e con i problemi di sicurezza in aumento, la verifica sta diventando sempre più importante.

Infatti quest'anno abbiamo avuto una serie di notizie sulla supply chain, dal blocco del malware e le policy sulle dipendenze in Composer 2.10 al pacchetto npm Axios che distribuiva un trojan di accesso remoto.

Vet richiede PHP 8.4 o versioni successive. Installalo come dipendenza di sviluppo e rispondi sì quando Composer chiede se consentire il plugin:

composer require laravel/vet --dev

Per prima cosa, contrassegna come trusted i package attualmente installati in vendor/:

./vendor/bin/vet --init
INFO  Trusted [125] packages, and wrote [vet.json].

Questo crea vet.json usando i file dei package già presenti sul tuo disco. Registra la tua fiducia in quei file senza averli esaminati. Vet poi controlla gli update futuri rispetto a quel record. Se un update contiene modifiche non trusted, Vet lo blocca prima che Composer scriva i nuovi file:

❯ composer update

to review (1)

carbonphp/carbon-doctrine-types 3.1.0 → 3.2.0 .............. 2 files changed
│
│   ~ src/Carbon/Doctrine/DateTimeImmutableType.php
│     @@ -17,7 +17,7 @@
│          /**
│           * @SuppressWarnings(PHPMD.UnusedFormalParameter)
│           */
│     -    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?DateTimeImmutable
│     +    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?CarbonImmutable
│          {
│              return $this->doConvertToPHPValue($value);
│          }
│
│   ~ src/Carbon/Doctrine/DateTimeType.php
│     @@ -17,7 +17,7 @@
│          /**
│           * @SuppressWarnings(PHPMD.UnusedFormalParameter)
│           */
│     -    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?DateTime
│     +    public function convertToPHPValue(mixed $value, AbstractPlatform $platform): ?Carbon
│          {
│              return $this->doConvertToPHPValue($value);
│          }
│

Packages: 1 to review, 124 trusted

ERROR  [1] package is not trusted. Read every change with [./vendor/bin/vet -v]. Run [./vendor/bin/vet] in a terminal to pick the ones that you trust.

TIP  Run [./vendor/bin/vet] in a terminal to hand every change to your coding agent.

Esegui ./vendor/bin/vet in un terminale per esaminare le modifiche. Puoi leggere tu stesso le modifiche al codice, poi premere la barra spaziatrice per selezionare i package di cui ti fidi. Oppure puoi chiedere a un coding agent installato sulla tua macchina di esaminarle prima. Vet mostra il risultato dell'agent accanto a ciascun package:

INFO  [claude] reviews [3] packages (58.1 KB). This takes a moment.

to review (3)

acme/logger 1.2.0 → 2.0.0 ................................. 12 files changed
│  FAIL   src/Ship.php reads .env and sends it to an unknown host
│         src/Ship.php  it posts the contents of [.env] to [telemetry.example.com]

acme/tooling 4.1.0 → 4.2.0 ................................. 8 files changed
│  WARN   the changes add two commands
│         The agent did not read [1] file, because it is too big. Read it yourself:
│         resources/schema.php  612.4 KB

carbonphp/carbon-doctrine-types 3.1.0 → 3.2.0 .............. 2 files changed
│  PASS   the changes narrow two return types

PASS significa che l'agent ha completato la sua revisione e non ha segnalato attacchi. FAIL identifica un file e spiega il problema trovato dall'agent.

WARN significa che la revisione è incompleta e richiede la tua attenzione. Un file potrebbe essere troppo grande, contenere dati non testuali, oppure l'agent potrebbe non aver restituito una risposta. SKIP significa che Vet non ha inviato file all'agent perché nulla è cambiato o non è riuscito a leggere i file del package.

Vet seleziona i package PASS per impostazione predefinita. Esamina i risultati e modifica la selezione, poi premi Invio per salvare i package di cui ti fidi. I soli risultati dell'agent non modificano vet.json.

Vet salva le tue scelte in vet.json, accanto a composer.json. Esegui il commit di questo file nel tuo repository. Ogni voce registra la versione di un package trusted e un hash, un valore calcolato dai file del package:

{
"schema": 4,
"require": {
"carbonphp/carbon-doctrine-types": {
"version": "3.2.1",
"hash": "tree-v2:0f158f3b909fc01e691ed5f5121186056232b049031e7d3a914676d49881ece5"
}
}
}

L'hash copre ogni file del package. Se i file cambiano, anche senza un nuovo numero di versione, Vet richiede un'altra revisione. Vet esce con un errore quando un package non è trusted, quindi il controllo fallisce nella tua build finché qualcuno non contrassegna quel package come trusted.

Vet è attualmente in beta, quindi il comportamento può cambiare prima della prima release stabile. Se vuoi un secondo livello sopra di esso, Heimdall imposta una policy di età minima per le tue dipendenze Composer, in modo che le nuove release debbano restare ferme qualche giorno prima che tu le installi. Visita il repo GitHub per la documentazione completa, e buon audit!

Condividi su: LinkedIn

Altri articoli recenti