Я создаю новый пакет 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 в правильном месте, и у меня правильно установлена структура файла?
Зависимости для кода в 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 — если они не являются тривиальными, в этом случае вы можете опубликовать их в качестве комментариев, и я постараюсь ответить на них и / или обновите этот пост соответственно.
Других решений пока нет …