---
title: "Laravel Vet: перегляд коду Composer-пакетів перед встановленням"
url: https://laravelukraine.com/blog/laravel-vet-peregliad-kodu-composer-paketiv-pered-vstanovlenniam
date: 2026-09-16
source: https://laravel-news.com/laravel-vet?utm_medium=feed&utm_source=feedpress.me&utm_campaign=Feed%3A+laravelnews
---

# Laravel Vet: перегляд коду Composer-пакетів перед встановленням

Команда Laravel випустила новий пакет **Laravel Vet**, який дозволяє переглядати код, що `composer update` збирається записати у вашу директорію `vendor/`, та зберігає список довірених пакетів у файлі `vet.json`. Інструмент працює як плагін Composer і виконується після кожного install та перед кожним update.

Якщо ви знайомі з `cargo vet` зі світу Rust, то це та сама ідея, але для Composer. Суть проста: кожне оновлення приносить у ваш проект новий код, який ніхто з вашої команди не читав. Vet показує вам цей код по одному пакету за раз, перш ніж він потрапить до проекту. Коли ви довіряєте пакету, Vet запам'ятовує це, тож наступне оновлення запитає лише про те, що змінилося.

## Інтеграція з AI-асистентами

Вам не потрібно читати все самостійно. Vet передає кожну зміну coding-агенту, який вже встановлений на вашій машині - це може бути Claude Code, Codex, Gemini або opencode. Агент читає код за вас і повідомляє результат: PASS або FAIL із зазначенням файлу та причини. Ви читаєте лише помилки, натискаєте Enter на решті та продовжуєте свою роботу.

Коли ви довіряєте пакету, Vet запам'ятовує це, і наступне оновлення запитає лише про зміни. Пакет, якому ніхто не довіряє, завершується з non-zero статусом, що робить інструмент корисним у збірках. Він працює з будь-яким проектом, що має `composer.json` - Laravel, Symfony, WordPress та звичайний PHP підтримуються повністю.

## Чому це важливо

Кожне оновлення Composer записує тисячі рядків коду, які ви маєте або вручну перевіряти через читання diff'ів, або сліпо довіряти Packagist. З ростом кількості проблем безпеки аудит стає дедалі важливішим.

Цього року ми спостерігали низку новин про атаки на ланцюг постачання: від блокування malware та політик залежностей у Composer 2.10 до компрометації npm-пакету Axios, який почав розповсюджувати троян віддаленого доступу.

## Як працює Vet

Vet вимагає PHP 8.4 або новішої версії. Встановіть його як development-залежність і дайте згоду, коли Composer запитає про дозвіл для плагіна:

```
composer require laravel/vet --dev
```

Спочатку позначте поточні пакети у `vendor/` як довірені:

```
./vendor/bin/vet --init
```

```
INFO  Trusted [125] packages, and wrote [vet.json].
```

Це створює `vet.json` на основі файлів пакетів, які вже є на вашому диску. Команда записує вашу довіру до цих файлів без їх перегляду. Далі Vet перевіряє майбутні оновлення проти цього запису. Якщо оновлення містить недовірені зміни, Vet зупиняє його перед тим, як Composer запише нові файли.

## Процес перегляду змін

Коли ви запускаєте `composer update`, Vet показує, які пакети потребують перегляду:

```
❯ composer update
to review (1)
carbonphp/carbon-doctrine-types 3.1.0 → 3.2.0 .............. 2 files changed
```

Інструмент показує детальний diff змін у кожному файлі, включаючи конкретні рядки коду, що були змінені.

Запустіть `./vendor/bin/vet` у терміналі для перегляду змін. Ви можете прочитати зміни коду самостійно, а потім натиснути пробіл, щоб вибрати пакети, яким довіряєте. Або ж можете попросити coding-агента, встановленого на вашій машині, спочатку переглянути їх. Vet відображає результат агента поруч з кожним пакетом:

```
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** означає, що агент завершив перегляд і не виявив атак. **FAIL** ідентифікує файл і пояснює проблему, яку знайшов агент.

**WARN** означає, що перегляд неповний і потребує вашої уваги. Файл може бути занадто великим, містити нетекстові дані, або агент міг не повернути відповідь. **SKIP** означає, що Vet не надіслав жодних файлів агенту, оскільки нічого не змінилося або він не зміг прочитати файли пакета.

Vet за замовчуванням вибирає пакети з позначкою PASS. Перегляньте результати, скоригуйте вибір, а потім натисніть Enter, щоб зберегти пакети, яким ви довіряєте. Самі по собі результати агента не змінюють `vet.json`.

## Структура vet.json

Vet зберігає ваш вибір у `vet.json` поруч з `composer.json`. Закомітьте цей файл до вашого репозиторію. Кожен запис містить довірену версію пакета та хеш - значення, розраховане на основі файлів пакета:

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

Хеш охоплює кожен файл у пакеті. Якщо файли змінюються, навіть без нового номера версії, Vet вимагає ще один огляд. Vet завершується з помилкою, коли пакет недовірений, тож перевірка не проходить у вашій збірці, доки хтось не позначить цей пакет як довірений.

## Поточний статус та додаткові інструменти

Vet зараз у бета-версії, тому поведінка може змінитися перед першим стабільним релізом. Якщо ви хочете додатковий рівень захисту, **Heimdall** встановлює політику мінімального віку для ваших Composer-залежностей, тож нові релізи мають "відлежатися" кілька днів перед встановленням.

Відвідайте GitHub-репозиторій для повної документації та щасливого аудиту!
