Введение: почему «мусор» в проекте — зло, и как Composer помогает его убрать
Вы когда-нибудь замечали, как Laravel-проект со временем превращается в гигантский склад ненужных пакетов? Вы ставили один пакет для прототипа, другой — для эксперимента, третий — просто «на всякий случай». А потом проект живёт, развивается, а эти пакеты висят мёртвым грузом, раздувая папку vendor и замедляя composer install.
Рано или поздно каждый разработчик задаёт себе вопрос: «How can I remove a package from Laravel using PHP Composer?». И это не просто техническая операция — это искусство наведения порядка. Сегодня мы разберём этот процесс от А до Я: не просто команды, а полный цикл очистки с примерами, лайфхаками и разбором типичных граблей.
Готовы превратить свой проект из «свалки зависимостей» в стройную систему? Поехали!
Что нужно знать перед удалением пакета
Прежде чем запустить composer remove, давайте разберёмся, как Composer вообще управляет зависимостями. В Laravel (и любом PHP-проекте) Composer работает через два главных файла:
composer.json— список всех требуемых пакетов и их версий.composer.lock— точный слепок установленных версий, чтобы на всех машинах проект работал одинаково.
Когда вы удаляете пакет, Composer обновляет оба файла: убирает запись из composer.json и пересчитывает composer.lock без удалённой зависимости. Но есть нюанс: если пакет используется другими пакетами, Composer откажется его удалять. Умный инструмент, ничего не скажешь.
Основная команда: composer remove
Самый простой и правильный способ удалить пакет — использовать встроенную команду composer remove. Синтаксис максимально прост:
composer remove vendor/package-name
Например, если вы хотите удалить популярный пакет для отладки barryvdh/laravel-debugbar, команда будет выглядеть так:
composer remove barryvdh/laravel-debugbar
После выполнения вы увидите примерно такой вывод:
Package "barryvdh/laravel-debugbar" removed from require
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
Всё! Пакет исчез из vendor, composer.json и composer.lock. Но это только начало. Настоящая магия происходит, когда вы начинаете чистить проект от «хвостов».
Удаление dev-зависимостей
Если пакет был установлен только для разработки (например, phpunit/phpunit), он обычно прописан в секции require-dev. Composer сам понимает, откуда удалять, но для уверенности можно указать флаг --dev:
composer remove --dev phpunit/phpunit
Это гарантирует, что команда применится именно к dev-зависимостям. Хотя на практике Composer и без флага отлично справляется.
Ручное удаление: когда автоматика бессильна
Бывают ситуации, когда composer remove отказывается работать. Например, если пакет является зависимостью другого пакета, который вы не удаляете. Или если вы случайно удалили запись из composer.json вручную, а пакет остался в vendor.
В таких случаях приходится действовать жёстко. Вот алгоритм ручного удаления:
- Удалите запись о пакете из секции
requireилиrequire-devфайлаcomposer.json. - Удалите папку пакета из
vendor/vendor/package-name(можно просто стереть всю папкуvendor— но это радикально). - Запустите
composer update, чтобы перегенерироватьcomposer.lockи автозагрузку.
Пример: если вы хотите удалить пакет spatie/laravel-permission вручную, сделайте так:
# Шаг 1: редактируем composer.json, убираем строку "spatie/laravel-permission": "^5.0"
# Шаг 2: удаляем папку
rm -rf vendor/spatie/laravel-permission
# Шаг 3: обновляем зависимости
composer update spatie/laravel-permission --with-dependencies
Важно: команда composer update без аргументов обновит ВСЕ пакеты — это может привести к неожиданным изменениям. Лучше указывать конкретный пакет.
Чистка кэша и автозагрузки
После удаления пакета часто остаются «призраки» в кэше и автозагрузке. Особенно это актуально для Laravel, где сервис-провайдеры и фасады регистрируются в конфигах.
Обязательно выполните:
composer dump-autoload
Эта команда перегенерирует файлы автозагрузки, чтобы PHP больше не пытался загрузить классы удалённого пакета. Если вы используете Laravel, не забудьте также очистить кэш приложения:
php artisan optimize:clear
Эта команда очистит кэш конфигов, маршрутов, событий и представлений. После удаления пакета это критически важно — иначе Laravel может пытаться загрузить несуществующие сервис-провайдеры и падать с ошибкой.
Что делать, если пакет оставил «следы» в коде?
Удаление пакета через Composer — это только полдела. Если вы использовали пакет в своём коде, вам нужно убрать все ссылки на него:
- Service Providers — удалите запись из
config/app.phpв секцииproviders. - Facades — уберите алиас из секции
aliasesв том же файле. - Middleware — если пакет добавлял свои middleware, удалите их из
app/Http/Kernel.php. - Blade-директивы — проверьте шаблоны на наличие кастомных директив от пакета.
- Миграции и сиды — если пакет создавал таблицы, решите, оставить их или откатить.
Пример: допустим, вы удалили пакет laravel/socialite, но в коде остался вызов Socialite::driver('github'). После удаления вы получите фатальную ошибку Class 'Socialite' not found. Поэтому проверяйте