Статьи

Пакеты частного композитора с Gemfury

Надеюсь, вы знакомы с 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/"
	}
},

Теперь давайте создадим сам пакет. Мы собираемся создать класс с единственной целью; использовать сложный, совершенно секретный запатентованный алгоритм для генерации кода купона на скидку для платформы электронной коммерции.

В вашем рабочем каталоге создайте каталоги srcsrc/AcmeCoupon.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-решением, оно стоит своей цены — но почему бы не попробовать его, используя бесплатную пробную версию или бесплатный пакет из одного пакета, и посмотрите, работает ли оно для вас.