为什么使用 PSR4 自动加载不会将任何类添加到类映射/命名空间文件中?



我有以下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"
    }
  ]
}

否则"您必须在包装存储库中完全复制项目元数据,这很难维护"。

相关内容

  • 没有找到相关文章

最新更新