我正在使用Composer来处理需要处理某些依赖项的项目,但我遇到了一个非常奇怪的问题 . Composer忽略子包中包含的composer.json文件 .
我的项目需要检索一些自定义zip包,在这些包中,composer.json文件定义了其他要求 . 这些需求的存储库在根composer.json文件中声明,因为Composer无法递归获取存储库 .
事情是,在我的zip包下载,解压缩并放入供应商目录后,作曲家完全忽略了其composer.json,其中定义了其他要求......
zip存档是这样的:
-
/ dir1
-
/ dir2
-
file1
-
file2
-
composer.json
为了让您了解这是我的root 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": "./"
}
},
}
而bundle的composer.json包看起来像
{
"name": "giulianobundles/mybundle",
"type":"library",
"require": {
"giulianobundles/mybundlerequirement": "1"
}
}
Mybundle包已成功安装,但其composer.json文件完全被忽略 . 任何的想法?我错过了什么?
1 回答
实际上,Composer不会递归地查看文件系统中的composer.json文件 . 它需要在存储库中查看composer.json文件 . 它通常的工作方式是包在某处有一个git或svn URL . 例如,Composer将直接从存储库中获取
git://<host>/<package>/composer.json
,以找出甚至安装的包's dependencies before it'来计算总体依赖性 .在您的情况下,您在自己的composer.json文件中定义
package
内联 . 这用于代替依赖中的composer.json文件 . 这意味着Composer将"package": { ... }
作为该包的规范composer.json文件,它不会查看代码本身;特别是打开包装后没有 . 它将Zip文件视为没有自己的composer.json文件 .在
"package": { ... }
中定义依赖项,或者在版本控制系统中托管代码,Composer可以从中获取composer.json文件 .