我已经设置了两个项目,一个'init'和一个库,这是init所需的。它们都设置了PSR-0自动加载,但是库中的自动加载值不会添加到init项目中的vendor/composer/autoload_namespaces.php中。
样本作曲家。
{
"name": "lxp/library",
"description": "A test library",
"autoload": {
"psr-0": {
"LXP\Library": "src/"
}
}
}
样本作曲家。从需要该库的项目中获取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 library Something在文件src/LXP/library/Something.php。
需要该库的项目在src/LXP/Init/Now.php文件中包含LXPInitNow类。
当在'init'项目中运行composer install时,它会下载库项目并将其正确地放入vendor,但是vendor/composer/autoload_namespaces.php中不包含库的自动加载信息,只有当前项目的信息。
我做错了什么?如果我在库项目中运行dump- autolload,那么autoload_namespaces.php文件是正确的,并且一个快速引导脚本确认它确实拾取了类。
EDIT -这是satiss -generated packages.json的一个问题。为了解决这个问题,我必须从库的编写器中添加自动加载信息。json到json文件我提供给satiss,这似乎是一个不必要的重复,所以我可能做错了。是否有一个地方可以存储满足库的自动加载信息?例如,能满意地读懂作曲家。存在于它扫描的库中的Json文件?
编辑#2 -萨蒂斯不读作曲家。指定为"包"类型的存储库中的json文件。这是显而易见的后见之明,因为"包"用于没有编写器的库。
改变满意度。Json的存储库为"vcs"类型意味着编写器。读取Json,并解析信息(包括自动加载规范)并将其存储在packages.json中。
@Seldaek -谢谢你的建议,我的满意配置是问题,我希望这澄清了满意/作曲家行为的其他人在我的位置
我认为你可能犯了两个可能导致这种情况的错误:
- 你忘了更新你的满足库,所以lxp/init的自动加载配置不是最新的
- 您正在从锁定文件中运行composer install,这意味着composer只是从composer读取信息。锁定文件,不将包元数据更新到satiss中可用的最新版本。要解决这个问题,你应该运行composer update。
尝试composer dump-autoload
命令。
这取决于你如何通过Composer安装你的库。例如,当下载它作为package
类型(我相信与composer
类型相同)时,Composer从不读取composer.json
文件,所以你应该使用vcs
或git
类型。看到:gh - 6846 .
这是composer.json
应该工作:
{
"require": {
"lxp/library": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "http://satis.repo.redacted/"
}
]
}
然后执行:composer install
.
对于故障排除,尝试运行:
-
composer dump-autoload -o -vvv
. -
composer diagnose -vvv