Пакет 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 - если они не являются тривиальными, в этом случае вы можете опубликовать их в качестве комментариев, и я постараюсь ответить на них и / или обновите этот пост соответственно.

Другие вопросы по тегам