我正在创建一个新的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 install
或composer update --prefer-dist
时,它无法识别此composer.json或进行任何尝试拉下那种依赖。
我的composer.json是否在正确的位置,我的文件结构是否正确设置?
答案 0 :(得分:1)
src
中代码的依赖关系在项目的根composer.json
中定义。 /src/crmpicco/ChargebeeBundle
中的那个被忽略。
如果要将以前的私有代码作为共享包发布,可以执行以下操作:
首先,阅读official best practices for reusable bundles。这将有助于以允许其他开发人员使用它的方式构建项目。
然后,清理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
的{{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 update
和composer.json
行中的包名称不匹配。或者,Composer可能会抱怨无法解析的依赖关系,您需要修复它。