编辑在composer中管理的多个PHP包
我使用composer来管理我的依赖项。 这些依赖项位于PackageGist(public)和my companies local composer存储库中,该存储库本身从companies gitlab实例获取其包,其中只有标签被推送到包服务器 现在来谈谈我的问题 我有一个包裹,我叫它a。 包A依赖于B。 我正在编辑B中的代码,我将其放在git分支中,根据设置的性质,它只在gitlab上,而不在包服务器上。 B依赖于C 我还必须编辑一个私人图书馆D。 D是C的依赖项 所以我在编辑B和D中的代码。 我必须更改D中类的psr-4自动加载路径,并在D中添加一个新名称空间 即在:编辑在composer中管理的多个PHP包,php,git,composer-php,gitlab,semantic-versioning,Php,Git,Composer Php,Gitlab,Semantic Versioning,我使用composer来管理我的依赖项。 这些依赖项位于PackageGist(public)和my companies local composer存储库中,该存储库本身从companies gitlab实例获取其包,其中只有标签被推送到包服务器 现在来谈谈我的问题 我有一个包裹,我叫它a。 包A依赖于B。 我正在编辑B中的代码,我将其放在git分支中,根据设置的性质,它只在gitlab上,而不在包服务器上。 B依赖于C 我还必须编辑一个私人图书馆D。 D是C的依赖项 所以我在编辑B和D中的代
"autoload": {
"psr-4": {
"hello\\hi": "src/"
}
}
之后:
"autoload": {
"psr-4": {
"hello\\hi\\": "src/abc",
"foor\\bar\\": "src/def",
}
}
当D的版本在C中设置为标记(例如^2.0)时,如何让自动加载程序拾取新类
通常我需要A中D的开发版本。但composer认为C包需要^2.0版本中的D包
我目前的解决办法似乎很笨拙:
我将C中D的版本更改为dev-
我把一个新分支推到了C的gitlab。
在B中,我将C的版本更改为dev-
。
我把一个新分支推到了B的gitlab。
在a中,我将B的版本定义为dev-
但是gitlab分支不会被发现,因此我不得不在A的Repositories部分添加gitlab存储库
这必须更简单,例如,强制安装包而不考虑其他依赖项。这仅用于开发和测试目的,不用于生产。首先,您这样做的事实表明您的体系结构存在问题。一个共享库应该有一个定义良好的用途,以及一个定义良好、可独立测试的API。因此,对包D的更改应定义为对该API的更改,并根据该定义进行测试。您可能希望将它与其直接依赖项进行集成测试,但使用由4个库组成的链是一个坏迹象
然而,这是真实的世界,所以这可能不是你一夜之间就能解决的问题
在composer.json
中,您可以指定一个版本(如开发分支)满足哪些版本约束。这可以通过两种不同的方式之一指定(您不需要两种方式都指定):
- 在repo D的dev分支中,可以指定
{“extra”:{“分支别名”:{“dev foo”:“2.0.x-dev”}}}
- 在repoa的dev分支中,您可以指定
{“require”:{“package/D”:“devfooas2.0.x-dev”}
或者,如果您正在积极开发这两个分支,而不仅仅是对库进行集成测试,那么您可以完全绕过Composer。如果设置为
source
,然后安装composer
,则每个库都将是完整的git克隆,您可以切换分支并直接编辑。您可以使用composer status
跟踪手动编辑的内容。如果您最终这样做了,那么考虑如何避免将来需要它绝对是一个好主意。是的,我100%同意此体系结构存在一个重大问题。不幸的是,我现在无法改变它。在我开始使用它之前,它已经被构建了很久,而且没有足够的时间和金钱来清理它。我会尝试你的建议并尽快报告。提前谢谢你的帮助。第二个建议非常有效,没有任何问题。这是我一直在寻找的优雅解决方案。