我正在为一个需要处理一些依赖关系的项目使用Composer,但我遇到了一个非常奇怪的问题。Composer忽略了子包中包含的composer.json文件。
我的项目需要检索一些定制的zip包,在这些包中,composer.json文件定义了其他需求。这些需求的存储库是在根composer.json文件中声明的,因为Composer不能递归地获取存储库。
问题是,在我的zip包被下载、解压缩并放在供应商dir中之后,composer完全忽略了它的composer.json,其中定义了其他需求.
zip归档文件如下所示:
为了给您一个想法,我的根composer.json是这样的:
{
"name": "myproject/project",
"type": "library",
"repositories": [
{
"packagist" : false
},
{
"type": "package",
"package": {
"name" : "giulianobundles/mybundle",
"version" : "1",
"dist": {
"url": "http://url/to/zip/file",
"type": "zip"
}
}
},
{
"type": "package",
"package": {
"name" : "giulianobundles/mybundlerequirement",
"version" : "1",
"dist": {
"url": "http://url/to/zip/file",
"type": "zip"
},
}
},
],
"require": {
"php": ">=5.3.2",
"giulianobundles/mybundle": "*"
},
"autoload": {
"psr-0": {
"config": "./"
}
},
}而这个包的composer.json包看起来就像
{
"name": "giulianobundles/mybundle",
"type":"library",
"require": {
"giulianobundles/mybundlerequirement": "1"
}
}Mybundle包安装成功,但是它的composer.json文件被完全忽略了。有什么想法吗?我遗漏了什么?
发布于 2013-02-22 11:39:01
实际上,Composer不会递归地查看文件系统中的composer.json文件。它需要查看存储库中的composer.json文件。它的工作方式通常是包在某个地方有一个git或svn。例如,Composer将直接从存储库中获取git://<host>/<package>/composer.json,以便在安装该包以计算整个依赖关系之前确定该包的依赖关系。
在您的示例中,您将在自己的package文件中定义一个内联的composer.json。这将用于替代依赖项中的composer.json文件。这意味着Composer将"package": { ... }作为该包的规范composer.json文件,它不会查看代码本身,尤其是在解压它之后。它将Zip文件视为没有自己的composer.json文件。
在"package": { ... }中定义依赖项或在版本控制系统中托管代码,编写器可以从该系统获取composer.json文件。
https://stackoverflow.com/questions/15023126
复制相似问题