Почему использование автозагрузки PSR4 не добавляет классы в файл classmap/namespaces?
У меня есть следующее 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
или же autoload_namespaces.php
в vendor/composer
,
До этого я добавил в проект 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 QueueIT\KnownUserV3\SDK\KnownUser; new KnownUser;'
Fatal error: Uncaught Error: Class 'QueueIT\KnownUserV3\SDK\KnownUser' not found in Command line code:1
Однако карта классов генерируется при выполнении composer dump-autoload -o
непосредственно в папке проекта самостоятельно (в пределах vendor/queueit/KnownUser.V3.PHP/
папка).
Почему мое определение автозагрузки в проекте composer.json
не работает при запуске из верхней папки?
1 ответ
Christophe Coevoet комментарию Christophe Coevoet на GitHub, Composer не поддерживает загрузку composer.json
файл из репозитория типа package
, Цель package
Тип для загрузки проектов, которые не поддерживают Composer. Следовательно composer.json
файл никогда не читается
Решение заключается в использовании vcs
введите вместо. Здесь composer.json
который должен работать:
{
"require": {
"queueit/knownuserv3": "dev-master"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/queueit/KnownUser.V3.PHP"
}
]
}
В противном случае "вам придется полностью скопировать метаданные проекта в репозиторий вашего пакета, и это сложнее поддерживать".