繁体   English   中英

Symfony 2捆绑有自己的composer.json

[英]Symfony 2 bundle with its own 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 ,但是当我从Symfony项目主目录执行composer installcomposer update --prefer-dist ,它无法识别此composer.json或进行任何尝试来降低该依赖关系。

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

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

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

首先,请阅读可重复使用捆绑软件官方最佳做法 这将有助于以允许其他开发人员使用它的方式来构建项目。

然后,清理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软件包,请在此处注册一个帐户,然后按照说明添加您的软件包。 (不要忘记设置更新挂钩。)

在这两种情况下,您现在都必须将包名称添加到root composer.jsonrequire部分。 只要您的软件包中没有标记发行版,就必须将dev-master添加为必需版本,并在根composer.json添加"minimum-stability" : "dev"行。

现在,从/src/crmpicco/ChargebeeBundle删除代码(或将其移至Symfony项目之外),然后运行composer update --prefer-source 现在,您应该在供应商下找到安装的捆绑软件。

您可能还意识到,由于“最小稳定性”设置,Composer将所有Symfony软件包更新为某些xx-dev版本。 随它去; 您可以在第一次成功运行后删除“最小稳定度”行,然后再次composer update 然后它将再次降级Symfony开发软件包,但请不要管它。 这是一种非常古怪的方法,但是我还没有找到更好的方法。 (也许其他人知道更好的方法来解决这个问题。)

如果安装时遇到问题,请仔细阅读Composer的输出并按照说明进行操作。 例如,您可能在软件包的composer.json的软件包名称与require行之间不匹配。 否则Composer可能会抱怨无法解决的依赖关系,您需要修复这些依赖关系。

祝好运! 您可能仍然会遇到其他问题,但是我建议您将它们作为单独的SO问题发布-除非它们很琐碎,否则在这种情况下,欢迎您将其发布为评论,我会尽力回答和/或相应地更新此帖子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM