为什么使用PSR4自动加载不会在classmap / namespaces文件中添加任何类?

时间:2017-11-26 15:36:12

标签: composer-php psr-4 composer.json

我有以下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.phpvendor/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)

要确认是这种情况,可以使用shell命令来测试它:

$ 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

但是,直接在项目文件夹it-self(composer dump-autoload -o文件夹中)执行vendor/queueit/KnownUser.V3.PHP/时会生成类映射。

为什么项目composer.json中的自动加载定义在从顶层文件夹运行时不会产生任何影响?

1 个答案:

答案 0 :(得分:0)

根据@stof comment at GitHub Composer 不支持从<http://example.com> <https://example.com> 类型的存储库加载composer.json文件。 package类型的目标是下载支持 Composer 的项目。因此,package文件从不读取。

解决方案是使用composer.json类型。以下是应该有效的vcs

composer.json

否则“你必须完全在你的包存储库中复制项目元数据,这很难维护”。