Як працює автоматичне виявлення пакетів у Laravel

pic

До версії Laravel 5.5, розробники мали вручну реєструвати провайдери пакетів у масиві providers в файлі config/app.php.

Давайте розглянемо, як Laravel управляє автодискавері (автоматичним виявленням).

Laravel використовує подію Composer post-autoload-dump для виконання команди Artisan package:discover.

pic

Ініціація процесу виявлення: Спочатку Laravel викликає функцію postAutoloadDump, що знаходиться в Illuminate\Foundation\ComposerScripts. Ця функція спочатку підключає файл autoload.php Composer. Потім очищує шляхи конфігураційних файлів, кешів сервісів і пакетів.

Виконання команди package:discover: Після цього Laravel виконує команду package:discover, що викликає функцію build класу Illuminate\Foundation\PackageManifest.

Фільтрація відповідних пакетів: Ця функція спочатку завантажує файл composer/installed.json, фільтруючи всі пакети за допомогою extra/laravel, а потім застосовує фільтрацію, використовуючи масив dont-discover з файлу Composer проєкту.

pic

Якщо ви не хочете, щоб певний пакет потрапляв в автодискавері, ви можете додати його в масив dont-discover.

pic

Оновлення кешу: Потім цей масив записується у файл packages.php, що знаходиться в папці bootstrap/cache.

Висновок

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

Перекладено з: How Laravel package auto-discovery work

Leave a Reply

Your email address will not be published. Required fields are marked *