Пакет Symfony 2 со своим собственным composer.json

Я создаю новый пакет Symfony 2, который я собираюсь открыть с открытым исходным кодом. Оно живет в /src/crmpicco/ChargebeeBundle,

Внутри этого каталога у меня есть composer.json, который выглядит так:

{
"name": "crmpicco/ChargebeeBundle",
"type": "library",
"description": "A Symfony 2 bundle which provides an easy way to handle billing and subscriptions.",
"keywords": [
"crmpicco",
"Chargebee",
"Symfony",
"Subscription"],
"license": "MIT",
"authors": [
{
"name": "CRMPicco",
"email": "[email protected]",
"homepage": "http://www.crmpicco.co.uk",
"role": "Analyst Developer"}
],
"require": {
"chargebee/chargebee-php": "^2.0"},
"autoload": {
"psr-0": {
"": "src/",
"SymfonyStandard": "app/"},
"classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
},
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-assets-install": "relative"}
}

Зависимость, которая требуется для пакета, chargebee/chargebee-phpОднако, когда я делаю composer install или же composer update --prefer-dist из основного каталога проекта Symfony он не распознает этот файл composer.json и не пытается удалить эту зависимость.

У меня есть composer.json в правильном месте, и у меня правильно установлена ​​структура файла?

0

Решение

Зависимости для кода в src определены в корне проекта composer.json, Тот, что в вашем /src/crmpicco/ChargebeeBundle игнорируется

Если вы хотите выпустить ранее закрытый код как общий пакет, вы можете сделать следующее:

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

Затем очистите composer.json, Хотя тот, который вы опубликовали, содержит большую часть того, что нужно, он также имеет некоторые ненужные значения, например classmap а также extra здесь не нужны Вы можете попробовать это (не стесняйтесь добавлять автора, ключевые слова и т. Д.):

{
"name": "crmpicco/ChargebeeBundle",
"type": "symfony-bundle",
"require": {
"chargebee/chargebee-php": "^2.0"},
"autoload": {
"psr-4": {
"Crmpicco\\ChargebeeBundle\\": ""}
},
"license": "MIT"}

Затем вы должны решить, хотите ли вы обслуживать пакет из частного репозитория или из чего-то вроде Github и хотите, чтобы он был зарегистрирован в Packagist.

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

"repositories": [
{
"type": "vcs",
"url": "ssh://[email protected]/path.to.repo.git"}
]

Если вы хотите сделать это официальным Packagist пакет, зарегистрируйте учетную запись там и следуйте инструкциям, чтобы добавить свой пакет. (Не забудьте установить хук обновления.)

В обоих случаях вам теперь нужно будет добавить имя пакета в require раздел вашего корня composer.json, Пока вы не пометили релизы в своем пакете, вы должны добавить dev-master как требуется версия, а также добавить строку "minimum-stability" : "dev" к корню composer.json,

Теперь удалите код из /src/crmpicco/ChargebeeBundle (или переместите его за пределы проекта Symfony) и запустите composer update --prefer-source, Теперь вы должны найти пакет, установленный под продавцом.

Вы также можете понять, что Composer обновляет все ваши пакеты Symfony до некоторых x.x-dev версия, которая обусловлена ​​настройкой «минимальная стабильность». Будь как будет; Вы можете удалить строку «минимальная стабильность» после первого успешного запуска, а затем composer update снова. Затем он снова понизит версию пакетов Symfony dev, но оставит ваш пакет в покое. Это довольно странный подход, но я еще не нашел лучшего. (Может быть, кто-то знает лучший способ справиться с этим.)

Если вы столкнулись с проблемами при установке, внимательно прочитайте вывод Composer и следуйте инструкциям. Например, у вас может быть несоответствие между именем пакета в пакете composer.json и require линия. Или Composer может жаловаться на неразрешимые зависимости, которые вам нужно исправить.

Удачи! Вы все еще можете столкнуться с другими проблемами, но я бы порекомендовал вам публиковать их как отдельные вопросы SO — если они не являются тривиальными, в этом случае вы можете опубликовать их в качестве комментариев, и я постараюсь ответить на них и / или обновите этот пост соответственно.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]