Php Symfony 2捆绑包及其自己的composer.json
我正在创建一个新的Symfony 2捆绑包,我的目标是开源。它位于Php Symfony 2捆绑包及其自己的composer.json,php,symfony,symfony-2.8,composer-php,Php,Symfony,Symfony 2.8,Composer Php,我正在创建一个新的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 subscript
/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
或composer更新时——从主Symfony项目目录中选择dist
,它不会识别此composer.json,也不会尝试下拉该依赖项
我的composer.json是否位于正确的位置,文件结构是否设置正确?项目根
composer.json
中定义了src
中代码的依赖项。您的/src/crmpicco/ChargebeeBundle
中的一个将被忽略
如果要将以前的私有代码作为共享包发布,可以执行以下操作:
首先,阅读下面的文章。这将有助于以允许其他开发人员使用它的方式构建您的项目
然后,清理composer.json
。虽然您发布的内容包含了很多需要的内容,但它也有一些不需要的值,例如这里不需要classmap
和extra
。您可能想试试这个(可以随意添加作者、关键字等):
然后,您必须决定是从私有回购还是从Github之类的东西提供捆绑,并希望它在PackageGist中注册
如果要在私人回购中使用,必须编辑全局composer.json
,并添加以下部分:
"repositories": [
{
"type": "vcs",
"url": "ssh://git@yourgitserver.example.com/path.to.repo.git"
}
]
如果您想将其作为正式软件包,请在那里注册一个帐户,并按照说明添加您的软件包。(别忘了设置更新挂钩。)
在这两种情况下,您现在都必须将包名添加到根composer.json
的require
部分。只要尚未在包中标记发行版,就必须将dev master
添加为所需版本,并将行“最小稳定性”:“dev”
添加到根composer.json
中
现在,从/src/crmpicco/ChargebeeBundle
中删除代码(或将其移到Symfony项目之外),然后运行编写器更新--首选源代码。您现在应该可以找到在供应商下安装的捆绑包
您可能还意识到,Composer会将所有Symfony软件包更新为某些x.x-dev
版本,这是由于“miminum stability”设置所致。顺其自然;您可以在第一次成功运行后删除“mimimum stability”行,然后再次composer update
。然后,它将再次降级Symfony开发包,但不要使用您的包。这是一个相当奇怪的方法,但我还没有找到更好的方法。(也许其他人知道更好的处理方法。)
如果在安装时遇到问题,请仔细阅读Composer的输出并按照说明进行操作。例如,包的composer.json
和require
行中的包名可能不匹配。或者编写者可能会抱怨无法解决的依赖项,您需要修复这些依赖项
祝你好运!您可能仍然会遇到其他问题,但我建议您将它们作为单独的SO问题发布–除非它们是琐碎的,在这种情况下,欢迎您将它们作为评论发布,我将尝试回答它们和/或相应地更新此帖子。可能不是您的问题的一部分,但是extra
部分以及app/
和classmap
的自动加载程序可能不属于您的包,因为它们是在实际应用程序的composer.json中定义的。除此之外,您能否列出将此捆绑包添加到项目中的步骤?您的捆绑包不在PackageGist上,因此我假设您必须修改项目的composer.json以使其可访问?目前,捆绑包仅存在于我们的内部私有回购中。因此,我把它放在我的FS上,符号链接到我的SF项目中的正确位置(例如,/src/crmpicco/ChargebeeBundle
)。我现在不希望它出现在PackageGist上,因为它是一个WIP。这没关系,但是你是如何将它符号化的?你是手工做的还是你自己做的?如果只是对其进行符号链接,composer将不会拉入包,因此不会解析包的composer.json。您基本上绕过了composer,这就是我为什么要问的原因。@dbrumann我在CLI中对它进行了符号链接,而没有使用composer,如果这是您的意思的话。i、 eln-s
。谢谢你的链接。你知道“require”:{“my/package”:“*”}
指的是什么吗?考虑到我的包在PackageGist上不可用,这对我有效吗?在您的情况下,您希望使用composer.json中定义的名称,因此crmpicco/ChargebeeBundle
。您还可以使用标志-v
运行composer,以获得更详细的输出。这将有助于了解composer是否可以在其中找到目录和包。
"repositories": [
{
"type": "vcs",
"url": "ssh://git@yourgitserver.example.com/path.to.repo.git"
}
]