При создании и распространении программного обеспечения PHP с помощью Composer , менеджера зависимостей PHP, вы можете настроить в основном два типа проектов: библиотека и приложение .
Если ваш код предназначен для включения в другие приложения, чтобы классы и другие компоненты были доступны на уровне кода, то вы, скорее всего, создаете библиотеку . Если ваш код самодостаточен как нечто, подлежащее установке и выполнению как отдельная часть, то вы, скорее всего, создаете приложение .
Иногда, однако, грань между этими двумя типами проектов не очень четкая. Возможно, вы захотите предоставить исполняемый код в дополнение к компонентам вашей библиотеки. Существует также случай, когда вы создаете инструмент, которому необходим доступ к контексту приложения, поэтому он не может быть установлен как отдельный проект и, следовательно, должен быть включен в более крупное приложение с требованием composer .
С помощью команд Composer Bin , вы можете включить исполняемые скрипты в свой проект , и они будут установлены (по символической ссылке) на поставщик/корзина . Примеры проектов, использующих эту функцию, включают ПЕСТФП и Laravel Sail , оба используют команды Composer bin для распространения исполняемых сценариев в качестве зависимостей приложений.
В этом уроке мы создадим команду bin Composer с помощью миниклипа , используя Рекомендации по API . Код для этого проекта доступен в виде миниклипа/рекомендации на GitHub и на Packagist . Преимущество использования Miniclip для чего-то подобного заключается в том, что вы не будете добавлять кучу новых зависимостей в проекты, в которых будет установлен ваш инструмент, единственная зависимость, добавленная с помощью Minicli, – это minicli/miniclip .
Требования
Вам понадобится среда разработки PHP с:
- PHP 7.4+ (только CLI)
- Композитор Установлен
Шаг 1. Настройка приложения Miniclip
Начните с требования миниклип/миниклип в вашем существующем приложении. В случае, если у вас нет существующего приложения, и вы хотели бы создать автономный инструмент с помощью Minicli, создайте новый каталог для своего приложения и запустите Composer оттуда, чтобы он сгенерировал для вас новый файл composer.json .
composer require minicli/minicli
Затем создайте новый каталог bin в корневой папке вашего приложения.
mkdir bin
Создайте новый файл с именем мини-клип в этой папке:
touch bin/minicli
Этот сценарий будет точкой входа вашего приложения CLI, которое будет доступно как команда Composer bin.
Примечание О Композиторе автозагрузка
При включении сценария автозагрузки композитора нам нужно сначала проверить, вызывается ли приложение из поставщика/корзины (как обязательная зависимость) или если он вызывается из самой папки приложения (как отдельный проект).
Для этого мы проверим наличие поставщика/autoload.php файл. Если этот файл не существует, вполне вероятно, что приложение вызывается как зависимость в папке поставщик , что делает сценарий автозагрузки доступным в другом месте.
Шаг 2: Создание скрипта корзины/мини-клипа
Откройте файл сценария miniclip в папке bin , которая в данный момент пуста. В следующем коде будет реализована проверка загрузки и загрузка нового приложения Miniclip с использованием предоставленного app_path как расположение команды, аналогично базовой демонстрации из официальных документов .
#!/usr/bin/php
registerCommand('help', function() use ($app) {
$app->getPrinter()->info("minicli help");
});
$app->runCommand($input->getRawArgs());
Скопируйте это содержимое в свой скрипт miniclip и не забудьте сохранить файл. Затем запустите зарегистрированную команду справка с:
php bin/minicli help
Как только вы подтвердите, что скрипт работает, вы можете создать новую команду для извлечения содержимого из API.
Шаг 3: Создание Команды Для Получения Рекомендаций.
Структура готова, и теперь вы можете идти дальше и выполнять свои команды.
Здесь мы создадим команду для получения справочной информации из бесплатного Рекомендации по API .
Это бесплатный API, который не требует аутентификации, но если вы хотите создать что-то более увлекательное, ознакомьтесь с API Giphy (для этого требуется регистрация приложения и предоставление ключей API). Я не буду описывать это здесь для простоты.
Наша команда получит случайный совет, а также примет параметр search=термин для поиска конкретного совета. Замените текущее содержимое вашего миниклипа скрипта следующим кодом, который реализует новую команду “совет”.:
#!/usr/bin/php
setSignature('./bin/minicli advice');
$input = new CommandCall($argv);
$app->registerCommand('help', function() use ($app) {
$app->getPrinter()->info("./bin/minicli advice");
});
$app->registerCommand('advice', function() use ($app, $input) {
$query_url = "https://api.adviceslip.com/advice";
if ($input->hasParam('search')) {
$query_url = "https://api.adviceslip.com/advice/search/" . $input->getParam('search');
}
$result = file_get_contents($query_url);
if ($result) {
$content = json_decode($result, true);
if (isset($content['total_results'])) {
$search_results = $content['slips'];
$advice = $search_results[array_rand($search_results)]['advice'];
} else {
if (isset($content['slip'])) {
$advice = $content['slip']['advice'];
}
}
$app->getPrinter()->newline();
$app->getPrinter()->info($advice ?? "No results found.");
$app->getPrinter()->newline();
}
return 0;
});
$app->runCommand($input->getRawArgs());
Теперь вы можете попробовать выполнить команду с помощью:
php bin/minicli advice
А также:
php bin/minicli advice search=spiders
Шаг 4: Обновление composer.json
Как только ваша команда заработает, вы захотите обновить файл composer.json , чтобы включить определение корзины.
Если это новое приложение, вы также можете захотеть обновить название и другую информацию, так как вам нужно будет отправить свой код в packagist.org для того, чтобы сделать его доступным для использования через композитор требует .
Вот как выглядит мой файл composer.json после обновления (я установил это имя пакета в мини-клип/совет-слип , вам следует использовать другое имя). Обратите внимание на запись bin , включая местоположение сценария мини-клипа . Вы могли бы включить сюда другие сценарии, если бы захотели.
{
"name": "minicli/advice-slip",
"description": "Demo - Advice Slip",
"license": "MIT",
"homepage": "https://github.com/minicli/advice-slip",
"keywords": ["cli","command-line", "demo"],
"require": {
"minicli/minicli": "^2.0",
"ext-json": "*"
},
"bin": [
"bin/minicli"
]
}
Если ваш проект уже находится в Packagist, вам нужно будет зафиксировать и отправить свои изменения в удаленный репозиторий, чтобы они были приняты Packagist. Возможно, вам потребуется создать новую версию вашего проекта, чтобы предоставить изменения существующим пользователям.
Если ваш проект еще не опубликован, выполните следующий шаг, чтобы настроить его с помощью Packagist.
Шаг 5: Отправка посылки упаковщику
Чтобы сделать команду доступной для всех, кто хотел бы использовать ее через Composer, ваш пакет/приложение должны быть отправлены на Packagist.org . Для этого сначала вам нужно поместить свое приложение в общедоступный репозиторий на GitHub. Получив URL-адрес репозитория, вы можете войти в Packagist и отправить свой новый пакет:
В идеале вы должны создать хотя бы один выпуск в своем репозитории GitHub (например 0.1.0 ). Если у вас нет релиза, Composer будет жаловаться на минимальную стабильность всякий раз, когда пользователю потребуется этот пакет для своих собственных проектов.
Как только все настроено, включая выпуск, вы можете включить свое приложение Miniclip в другие проекты с помощью обычного композитор требует организации/проекта :
composer require minicli/advice-slip
Using version ^0.1.0 for minicli/advice-slip ./composer.json has been updated Running composer update minicli/advice-slip Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking minicli/advice-slip (0.1.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Downloading minicli/advice-slip (0.1.0) - Installing minicli/advice-slip (0.1.0): Extracting archive Generating autoload files 1 package you are using is looking for funding. Use the `composer fund` command to find out more!
Команда, которую мы создали, будет доступна как:
./vendor/bin/minicli advice
Или:
php vendor/bin/minicli advice
Вывод
В этом уроке мы рассмотрели, как создать приложение с одной командой с помощью Miniclip и как превратить его в команду Composer Bin.
Вы можете получить доступ к кодовой базе этого проекта по адресу https://github.com/minicli/advice-slip .
Оригинал: “https://dev.to/erikaheidi/how-to-create-a-composer-bin-command-with-minicli-35ih”