Как сделать библиотеку устанавливаемой через Composer
Создание библиотеки в Composer и публикация её в Packagist
  1. Каждый проект в Composer — это пакет
  2. Версионирование библиотек в Composer
    1. Версионирование VCS
  3. Блокировка файла в Composer
  4. Публикация в VCS
  5. Публикация в Packagist

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



Каждый проект в Composer — это пакет.

В этой главе описывается, как сделать свою библиотеку устанавливаемой через Composer.

Как только в какой-либо директории появляется composer.json, эта директория становится пакетом. Когда вы добавляете require в проект, вы создаете пакет, который зависит от других пакетов. Единственное различие между вашим проектом и библиотекой заключается в том, что ваш проект - это пакет без имени.

Чтобы сделать этот пакет устанавливаемым, необходимо задать ему имя. Для этого нужно добавить свойство name в composer.json:

{
    "name": "acme/hello-world",
    "require": {
        "monolog/monolog": "1.0.*"
    }
}

В данном случае имя проекта acme/hello-world, где acme - имя разработчика. Указание имени разработчика является обязательным.

Примечание: Если вы не знаете, что использовать в качестве имени разработчика, ваше имя пользователя на GitHub обычно является хорошим вариантом. Имена пакетов должны быть в нижнем регистре, а для разделения слов принято использовать тире.

Версионирование библиотек в Composer.

В подавляющем большинстве случаев вы будете поддерживать свою библиотеку с помощью какой-либо системы контроля версий, например, git, svn, hg или fossil. В этих случаях Composer получает версии из вашей VCS, и поэтому вам не следует указывать версию в файле composer.json. (См. статью Версии, чтобы узнать о том, как Composer использует ветви и теги VCS для определения версий).

Если вы поддерживаете пакеты вручную (т.е. без VCS), необходимо явно указать версию, добавив значение version в файл composer.json:

{
    "version": "1.0.0"
}

Примечание: Когда вы добавляете жестко заданную версию в VCS, версия будет конфликтовать с именами тегов. Composer не сможет определить номер версии.

Версионирование VCS.

Composer использует возможности ветвей и тегов вашей VCS для определения версий, которые вы указываете в поле require, для определенных наборов файлов. При определении доступных версий Composer просматривает все ваши теги и ветви и преобразует их имена во внутренний список параметров, которые затем сопоставляет с указанным вами ограничением версии.

Подробнее о том, как Composer обрабатывает теги и ветви и как он применяет ограничения версий пакетов, читайте в статье о версиях.

Блокировка файла в Composer.

Для своей библиотеки можно зафиксировать файл composer.lock, если это необходимо. Это может помочь вашей команде всегда тестировать одни и те же версии зависимостей. Однако этот файл блокировки не будет иметь никакого влияния на другие проекты, которые зависят от него. Он влияет только на основной проект.

Если не требуется коммитить файл блокировки, и вы используете git, добавьте его в .gitignore.

Публикация в VCS.

Если у вас есть VCS-репозиторий (система контроля версий, например, git), содержащий файл composer.json, ваша библиотека уже может быть установлена с помощью composer. В примере ниже библиотека acme/hello-world будет опубликована на GitHub по адресу github.com/username/hello-world.

Теперь, чтобы проверить установку пакета acme/hello-world, мы создадим новый проект локально. Назовём его acme/blog. Этот блог будет зависеть от acme/hello-world, который, в свою очередь, зависит от monolog/monolog. Мы можем сделать это, создав где-нибудь новый каталог блога, содержащий composer.json:

{
    "name": "acme/blog",
    "require": {
        "acme/hello-world": "dev-master"
    }
}

В данном случае имя не нужно, так как в этом случае мы не хотим публиковать блог как библиотеку. Оно добавлено здесь, чтобы уточнить, какой composer.json описывается.

Теперь необходимо указать приложению блога, где найти зависимость hello-world. Для этого добавим спецификацию репозитория пакетов в composer.json блога:

{
    "name": "acme/blog",
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/username/hello-world"
        }
    ],
    "require": {
        "acme/hello-world": "dev-master"
    }
}

Более подробно о том, как работают репозитории пакетов и какие другие типы доступны, смотрите раздел Репозитории.

Вот и все. Теперь можно установить зависимости, выполнив команду install в Composer!

Итого: Любой репозиторий git/svn/hg/fossil, содержащий composer.json, можно добавить в ваш проект, указав репозиторий пакетов и объявив зависимость в поле require.

Публикация в Packagist.

Итак, теперь вы можете публиковать пакеты. Но каждый раз указывать репозиторий VCS очень обременительно. Не стоит заставлять всех пользователей делать это.

Еще одна вещь, которую вы могли заметить, это то, что мы не указали хранилище пакетов для monolog/monolog. Как это было сделано? Ответ — Packagist.

Packagist — это основной репозиторий пакетов для Composer, и он включен по умолчанию. Все, что публикуется на Packagist, автоматически доступно через Composer. Поскольку Monolog находится на Packagist, то можно использовать его без необходимости указывать дополнительные репозитории.

Если бы мы хотели поделиться hello-world со всем миром, мы бы тоже опубликовали его на Packagist.

Вы заходите на Packagist и нажимаете кнопку "Отправить". Вам будет предложено зарегистрироваться, если вы этого еще не сделали, а затем вы сможете отправить URL-адрес вашего VCS-репозитория, после чего Packagist начнет его сканирование. Как только это будет сделано, ваш пакет станет доступен для всех!

Перевод с английского официальной документации Composer:
https://getcomposer.org/doc/02-libraries.md

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню