我已经设置了两个项目,一个'init'和一个库,这是init所需要的。它们都设置了PSR-0自动加载,但来自库的自动加载值不会添加到init项目中的vendor / composer / autoload_namespaces.php。
来自图书馆的示例composer.json:
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\\Library": "src/"
}
}
}
来自需要该库的项目的示例composer.json:
{
"name": "lxp/init",
"name": "A test init",
"autoload": {
"psr-0": {
"LXP\\Init": "src/"
}
},
"repositories": [
{
"type": "composer",
"url": "http://satis.repo.redacted/"
}
],
"require": {
"lxp/library": "dev-master"
}
}
该库包含文件src / LXP / Library / Something.php中的LXP \ Library \ Something类。
需要库的项目在文件src / LXP / Init / Now.php中包含类LXP \ Init \ Now。
在'init'项目中运行composer install时,它会下载库项目并将其正确放入供应商,但vendor / composer / autoload_namespaces.php不包含库的自动加载信息,只包含当前项目的信息。
我做错了什么?如果我在库项目中运行dump-autoload,那么autoload_namespaces.php文件是正确的,并且一个快速的bootstrap脚本确认它确实拿起了这个类。
编辑 - 这是令人满意的packages.json的问题。为了修复它,我不得不将库的composer.json中的自动加载信息添加到我提供的json文件中,这似乎是一个不必要的重复,所以我可能做错了。是否有一个地方可以存储自动加载信息以满足库?例如,是否可以读取它扫描的库中存在的composer.json文件?
编辑#2 - Satis不会从指定为“package”类型的存储库中读取composer.jsons。事后看来这很明显,因为'package'用于没有composer.json的库,并且是一种围绕它们包含类似于作曲器的依赖管理的方法。
将satisf.json的存储库更改为'vcs'类型意味着读取了composer.json,并且解析了信息(包括自动加载规范)并将其存储在packages.json中。
@Seldaek - 谢谢你建议我的满意配置是问题,我希望这能澄清我职位上任何其他人的满意/作曲家行为。
答案 0 :(得分:6)
我发现你可能犯过两个可能导致这种错误的错误:
答案 1 :(得分:2)
这取决于您通过 Composer 安装库的方式。例如,将其下载为package
类型(我认为与composer
类型相同)时, Composer 永远不会读取composer.json
文件,因此您应该使用{ {1}}或vcs
类型。请参阅:GH-6846。
以下git
应该有效:
composer.json
然后运行:{
"require": {
"lxp/library": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "http://satis.repo.redacted/"
}
]
}
。
要进行问题排查,请尝试运行:
composer install
。composer dump-autoload -o -vvv