我设置了两个项目,一个'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"
}
}
库中包含的类LXP \图书馆\东西文件src/LXP/Library/Something.php。
需要该库的项目包含文件src/LXP/Init/Now.php中的类LXP \ Init \ Now。
在'init'项目中运行composer install时,它会下载库项目并将其正确放入供应商,但vendor/composer/autoload_namespaces.php不包含库的自动载入信息,仅包含当前项目的信息。
我在做什么错?如果我在库项目中运行dump-autoload,那么autoload_namespaces.php文件是正确的,并且一个快速启动脚本确认它确实拿起了类。
编辑 - 这是令人满意的packages.json的问题。为了解决这个问题,我必须将库的composer.json中的自动加载信息添加到我提供的json文件中,这似乎是不必要的重复,所以我可能做错了。是否有一个地方可以存储自动加载信息以满足库?例如,可以满足读取它扫描库中存在的composer.json文件吗?
编辑#2 - Satis不读取指定为'package'类型的存储库中的composer.jsons。事后看来,这是显而易见的,因为'package'用于没有composer.json的库,并且是一种包装类似composer的依赖关系管理的方法。
将satis.json的存储库更改为'vcs'类型意味着读取了composer.json,并且信息(包括自动载入规范)被解析并存储在packages.json中。
@谢尔达克 - 谢谢你提出我的满意配置是问题,我希望这能够澄清我/我所处位置的任何其他人的满意/作曲家行为。
@Seladek - 我SATIS产生packages.json不包含任何自动加载信息,是否应该?自从图书馆的自动加载信息被添加以来,它已经被重新生成。由于这是一个测试平台项目,我在运行之间完全拆除作曲家,删除composer.lock和供应商目录并重新运行作曲家安装。 – bmcgavin 2013-05-07 08:12:26
@Seladek - 但是,我可以确认将自动载入信息直接添加到packages.json中是否具有预期的效果。现在编辑原始问题。 – bmcgavin 2013-05-07 08:41:01
我认为现在的答案取决于你如何配置满意。如果你使用“type”:“package”,那么你可能不应该这样做,因为它只能用于没有composer.json的代码。如果是这样,你应该使用类型“vcs”,然后它会扫描git仓库的composer.json,并在生成的packages中正确包含autoload信息。 – Seldaek 2013-05-07 13:21:45