Надеюсь, вы знакомы с Composer , самым последним и, вероятно, самым выдающимся менеджером пакетов PHP. Если нет, ознакомьтесь с представлением Александра , и я не сомневаюсь, что вы сразу же продадите его. Вам понадобятся практические знания, чтобы получить максимальную отдачу от этой статьи.
Composer работает эффективно и без проблем в сочетании с Packagist , полным хранилищем общедоступных пакетов.
Однако рано или поздно придет время, когда вы напишите свой собственный пакет, который по какой-либо причине не может быть открыт с открытым исходным кодом и свободно распространяться через Packagist.
Есть несколько вариантов размещения этих частных пакетов. Вы можете настроить файл composer.json
Или Satis позволяет вам создавать свои собственные статические репозитории. В качестве альтернативы, Toran Proxy позволяет вам создать частную версию Packagist с собственным хостом, которая после настройки намного проще в управлении, чем путем указания репозиториев в вашем composer.json
Gemfury — это альтернатива PaaS. Помимо душевного спокойствия, которое приходит от размещенного решения — хотя и имеющего высокую цену — одно огромное преимущество заключается в том, что оно поддерживает не только пакеты PHP Composer, но и Ruby Gems, Node.js npm, Python PyPi, APT, Ням и ню-геть. Отлично, если у вас под языком есть несколько языков.
Давайте погрузимся и посмотрим, как его использовать.
Настройка вашей учетной записи
Для начала вам понадобится аккаунт. Существует 14-дневная пробная версия, бесплатная учетная запись, ограниченная одним соавтором, и один размещенный пакет, а также ряд других планов, начиная с 9 долларов США в месяц.
Вы можете зарегистрироваться либо по электронной почте, либо с помощью своей учетной записи Github. Зайдите на сайт, чтобы зарегистрироваться.
Создание вашего первого пакета
Чтобы продемонстрировать, как использовать Gemfury для частных пакетов Composer, давайте пройдемся по процессу создания пакета с нуля, который мы позже представим службе для использования в других проектах.
Самый простой способ создать новый пакет — использовать следующую команду:
composer init
Он задаст вам ряд вопросов; Вот пример стенограммы процесса:
Welcome to the Composer config generator
This command will guide you through creating your composer.json config.
Package name (<vendor>/<name>) [your-username/package]: your-username/coupon
Description []: Generates a discount coupon code using a super-secret algorithm
Author [Your Name <[email protected]>]:
Minimum Stability []: dev
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]? yes
Search for a package []: faker
Found 15 packages matching faker
[0] fzaninotto/faker
[1] fzaninotto/faker
[2] bobthecow/faker
[3] tomaj/faker
[4] typo3/faker
[5] yiisoft/yii2-faker
[6] willdurand/faker-bundle
[7] denheck/faker-context
[8] coduo/tutu-faker-extension
[9] davidbadura/faker-bundle
[10] kphoen/faker-service-provider
[11] vegas-cmf/faker
[12] burriko/cake-faker
[13] bit3/faker-cli
[14] emanueleminotto/faker-service-provider
Enter package # to add, or the complete package name if it is not listed []: 0
Enter the version constraint to require []: *
Search for a package []:
Would you like to define your dev dependencies (require-dev) interactively [yes]? no
{
"name": "your-username/coupon",
"description": "Generates a coupon code",
"require": {
"fzaninotto/faker": "*"
},
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "[email protected]"
}
],
"minimum-stability": "dev"
}
Do you confirm generation [yes]? yes
Как видите, мы создаем простой пакет с одной зависимостью, Faker .
Далее, давайте добавим строку во вновь созданный composer.json
"autoload": {
"psr-0": {
"Acme\\": "src/"
}
},
Теперь давайте создадим сам пакет. Мы собираемся создать класс с единственной целью; использовать сложный, совершенно секретный запатентованный алгоритм для генерации кода купона на скидку для платформы электронной коммерции.
В вашем рабочем каталоге создайте каталоги src
src/Acme
Coupon.php
<?php namespace Acme;
use Faker\Factory;
class Coupon {
public static function generate($percent)
{
$faker = Factory::create();
return sprintf('%s-%s-%d',
strtoupper(date('M')),
strtoupper($faker->word()),
intval($percent));
}
}
Теперь запустите composer install
Это наш пакет построен. Теперь, чтобы загрузить его в Gemfury.
Для продолжения вам понадобится ваш ключ API. Если вы перейдете на свою панель инструментов, вы найдете ее в разделе « Настройки» .
Самый простой способ создать и загрузить пакет — это просто использовать Git и позволить Gemfury позаботиться обо всем остальном.
Начните с создания файла .gitignore
vendor/
composer.lock
Теперь инициализируйте репозиторий:
git init
Добавьте файлы:
git add src
git add composer.json
Теперь мы добавим Git Remote. Вы можете найти соответствующий URL, выбрав « Начало работы» на панели инструментов Gemfury, а затем перейдя на вкладку «PHP Composer». Это будет выглядеть примерно так:
https://[email protected]/your-username/<package-name>.git
Обязательно замените your-username
git remote add fury https://[email protected]/your-username/coupon.git
На данный момент у вас есть два варианта. Первый — использовать явное управление версиями , где вы указываете версию в вашем файле composer.json
{
"name": "your-username/coupon",
"description": "Generates a coupon code",
"version": "1.0.0",
...
Важно, что вы используете семантическое управление версиями . В противном случае ваш пакет может не сработать должным образом; это также может привести к некоторым странным формулировкам сообщений об ошибках.
Кроме того, вы можете использовать теги Git. Например, создайте новую версию, используя тег следующим образом:
git tag -a 1.0.0 -m "Version 1.0.0"
Какой бы подход вы ни выбрали, следующим шагом будет принятие:
git commit -a -m "Initial commit"
Наконец, выполните следующую команду:
git push fury master --tags
Это подтолкнет ваш код к Gemfury, который затем автоматически создаст его как пакет для вас.
Теперь, если вы перейдете на свою панель инструментов, вы должны увидеть свой новый репозиторий в списке. Далее давайте посмотрим, как вы можете использовать его в проекте.
Использование частного пакета
Если вы вернетесь к своей панели инструментов и выберете «Repos» в левой части, вы найдете свой частный URL репо. Это должно оставаться частным, так что держите его в безопасности. Это будет выглядеть примерно так:
https://php.fury.io/SECRET-CODE/your-username/
Это SECRET-CODE
сути частным.
Теперь добавьте его composer.json
"repositories": [{
"type": "composer",
"url": "https://php.fury.io/SECRET-CODE/your-username/"
}],
Вам нужно только добавить этот репозиторий, чтобы использовать любой из закрытых пакетов Composer, созданных вами в Gemfury. Нет необходимости добавлять отдельные репозитории каждый раз, когда вы хотите использовать пакет.
Теперь вы можете require
Вот полный пример проекта composer.json
{
"name": "your-username/my-ecommerce-platform",
"authors": [
{
"name": "Your Name",
"email": "[email protected]"
}
],
"repositories": [{
"type": "composer",
"url": "https://php.fury.io/SECRET-CODE/your-username/"
}],
"require": {
"your-username/coupon": "1.0.1"
}
}
Другие подходы
Лично я считаю, что использование Git и тегов — это самый простой и эффективный способ управления вашими пакетами.
Кроме того, если вы предпочитаете, вы можете создать его самостоятельно, заархивировав исходный код вашего пакета и загрузив его через панель управления Gemfury.
Инструмент командной строки
Gemfury также предоставляет инструмент командной строки. Чтобы установить это:
sudo gem install gemfury
Чтобы перечислить ваши пакеты, вы можете использовать следующую команду:
fury list
Слишком посмотреть версии конкретного пакета:
fury versions package-name
Для получения дополнительной информации о CLI, посетите соответствующий раздел документации.
Резюме
В этой статье я рассмотрел Gemfury, один из нескольких вариантов управления частными репозиториями. Как решение PaaS, оно поставляется без дополнительного бремени автономного варианта, такого как Toran, и его проще использовать, чем Satis. Он также имеет большое преимущество поддержки пакетов на разных языках, от пакетов PHP Composer до Ruby Gems и Node.js npm. Конечно, будучи PaaS-решением, оно стоит своей цены — но почему бы не попробовать его, используя бесплатную пробную версию или бесплатный пакет из одного пакета, и посмотрите, работает ли оно для вас.