我有以下composer.json
文件:
{
"require-dev": {
"queueit/KnownUser.V3.PHP": "dev-master"
},
"repositories": [
{
"type": "package",
"package": {
"name": "queueit/KnownUser.V3.PHP",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/kenorb-contrib/KnownUser.V3.PHP.git",
"reference": "task/composer-autoloader"
}
}
}
]
}
但是,在运行composer install
时,命名空间或类未添加到autoload_classmap.php
中的CC_3或autoload_namespaces.php
中。
在此之前,我已经添加到项目的composer.json
中:
"autoload": {
"psr-4": {
"QueueIT\": ""
}
}
为了扫描当前文件夹中的类/名称空间,该文件看起来像:
$ cat vendor/queueit/KnownUser.V3.PHP/composer.json
{
"name": "queueit/knownuserv3",
"description": "The Queue-it Security Framework is used to ensure that end users cannot bypass the queue by adding a server-side integration to your server.",
"require": {
"php": ">=5.3.3"
},
"license":"LGPL-3.0",
"autoload": {
"psr-4": {
"QueueIT\": ""
}
}
}
手动执行dump-autoload
没有任何效果以及以下内容:
$ composer dump-autoload -o
Generating optimized autoload files
$ grep -R QueueIT vendor/composer/
(no results)
确认就是这样,这是对其进行测试的外壳命令:
$ php -r 'require __DIR__ . "/vendor/autoload.php"; use QueueITKnownUserV3SDKKnownUser; new KnownUser;'
Fatal error: Uncaught Error: Class 'QueueITKnownUserV3SDKKnownUser' not found in Command line code:1
但是,当直接在项目文件夹IT中执行composer dump-autoload -o
时,将生成ClassMap(在vendor/queueit/KnownUser.V3.PHP/
文件夹中)。
为什么我的 composer.json
中的自动加载定义从顶级文件夹运行时不会受到任何影响?
根据@stof注释, composer 不支持package
类型的存储库中composer.json
文件的加载。package
类型的目标是下载不支持 Composer 的项目。因此, composer.json
文件是从不读取。
解决方案是使用vcs
类型。这是composer.json
,应该有效:
{
"require": {
"queueit/knownuserv3": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/queueit/KnownUser.V3.PHP"
}
]
}
否则"您必须在包装存储库中完全复制项目元数据,这很难维护"。