Пакет 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": "picco@crmpicco.co.uk",
"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 в правильном месте, и правильно ли установлена моя структура файлов?
1 ответ
Зависимости для кода в 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://git@yourgitserver.example.com/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 - если они не являются тривиальными, в этом случае вы можете опубликовать их в качестве комментариев, и я постараюсь ответить на них и / или обновите этот пост соответственно.