Почему использование автозагрузки 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"
    }
  ]
}

В противном случае "вам придется полностью скопировать метаданные проекта в репозиторий вашего пакета, и это сложнее поддерживать".

Другие вопросы по тегам