Symfony 2捆绑了自己的composer.json

时间:2018-02-14 03:04:33

标签: php symfony composer-php symfony-2.8 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"
  }
}

bundle需要的依赖项为chargebee/chargebee-php,但是当我从主Symfony项目目录中执行composer installcomposer update --prefer-dist时,它无法识别此composer.json或进行任何尝试拉下那种依赖。

我的composer.json是否在正确的位置,我的文件结构是否正确设置?

1 个答案:

答案 0 :(得分:1)

src中代码的依赖关系在项目的根composer.json中定义。 /src/crmpicco/ChargebeeBundle中的那个被忽略。

如果要将以前的私有代码作为共享包发布,可以执行以下操作:

首先,阅读official best practices for reusable bundles。这将有助于以允许其他开发人员使用它的方式构建项目。

然后,清理composer.json。虽然您发布的内容包含了所需的大部分内容,但它也有一些不需要的值,例如:此处不需要classmapextra。您可能想尝试这个(随意添加作者,关键字等):

{
    "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的{​​{1}}部分。只要您的包中没有标记版本,就必须根据需要添加composer.json版本,并将行dev-master添加到根"minimum-stability" : "dev"

现在,从composer.json删除代码(或将其移出Symfony项目之外)并运行/src/crmpicco/ChargebeeBundle。您现在应该找到在供应商下安装的软件包。

您可能还意识到Composer会将所有Symfony软件包更新为某个composer update --prefer-source版本,这是由于“miminum-stability”设置所致。随它去;您可以在第一次成功运行后删除“miminum-stability”行,然后再次x.x-dev。然后它会再次降级Symfony开发包,但不要单独捆绑。这是一个非常古怪的方法,但我还没有找到更好的方法。 (也许其他人知道更好的方法来解决这个问题。)

如果您在安装时遇到问题,请仔细阅读Composer的输出并按照说明操作。例如,您可能在捆绑包的composer updatecomposer.json行中的包名称不匹配。或者,Composer可能会抱怨无法解析的依赖关系,您需要修复它。

祝你好运!您可能仍会遇到其他问题,但我建议您将它们作为单独的SO问题发布 - 除非它们是微不足道的,在这种情况下,欢迎您将它们作为评论发布,我将尝试回答它们和/或相应地更新这篇文章。