我已经设置了两个项目,一个“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 文件是正确的,并且快速引导脚本确认它确实获取了该类。
编辑-这是 satis 生成的 packages.json 的问题。为了解决这个问题,我必须将库的composer.json中的自动加载信息添加到我提供给satis的json文件中,这似乎是不必要的重复,所以我可能做错了。是否有一个地方可以存储 Satis 库的自动加载信息?例如,satis 可以读取它扫描的库中存在的composer.json 文件吗?
编辑#2 - Satis 不会从指定为“package”类型的存储库读取composer.jsons。事后看来,这是显而易见的,因为“package”用于没有composer.json的库,并且是一种围绕它们包装类似composer的依赖管理的方法。
将 satis.json 的存储库更改为“vcs”类型意味着读取了composer.json,并且解析了信息(包括自动加载规范)并将其存储在packages.json中。
@Seldaek - 感谢您建议我的 satis 配置是问题所在,我希望这可以为处于我位置的其他人澄清 satis / 作曲家的行为。