Локальная разработка пакетов с composer

В этой статье мы рассмотрим как установить локальную библиотеку через менеджер зависимостей Composer. Предположим, это может быть полезно если вы работаете над библиотекой, которую в дальнейшем хотите опубликовать в сети и предоставить возможность ее установки для других разработчиков через composer/packagist. Но при этом в ходе разработки и отладки пакета - конечно же хочется, чтобы пакет можно было развернуть на "реальном" приложении и проверить всю его логику еще раз перед публикацией.
Недостаток подхода состоит в том, что в приложении, куда мы будем подключать нашу библиотеку, в composer.json нужно выставить параметр "minimum-stability" на "dev". Что означает, что в проет притянутся другие зависимые либы в development версиях.
Итак, внутри composer.json файла Вашего приложения прописываем дефиницию для тесриуемого локального пакета, добавляя repositories объект:
{
"name": "laravel/laravel",
"minimum-stability": "dev",
...
"repositories": {
"dev-package": {
"type": "path",
"url": "/Users/i/www/test-library",
"options": {
"symlink": true
}
}
}
}
Аргумент "type": "path" позволяет Composer понять, что вы ссылаете на локальный репозиторий, а "url" определяет абсолютный или относительный путь к вашей библиотеке.
Этих двух параметров будет достаточно, но при таком подходе Composer будет копировать содержимое из локального пути к билиотеке внутрь проекта. А чтобы иметь возможность проверить следующие правки, нужно будет выполнять команду composer update.
Чтобы предотвратить такое поведение менеджера зависимостей - добавляем дополнительную опцию "symlink": true. Теперь вместо полного копирования в папку vendor, будет лишь создан симлинк на локальный путь к библиотеке.
Для установки локального пакета через Composer выполняем:
composer require vendor/dev-package @dev
После этого Ваша библиотека будет связана с приложением по средствам symlink и вы можете приступать к испытаниям. Удачи!