Composer 自动加载在 post-install 脚本中失败

Composer auto-load fails inside post-install script

当 运行 post-install 命令时,composer 似乎无法加载 psr-4 class。

这是我的 composer.json:

{
  "autoload": {
      "psr-4": {
        "Modules\": "modules/",
        "ComposerScript\": ""
      }
  },
 "scripts": {
    "post-install-cmd": [
      "ComposerScript\ComposerScript::postInstall"
    ]
  }
}

ComposerScript.php 包含:

<?php

namespace ComposerScript;

use Modules\Common\Services\RouterService;
use Composer\Script\Event as ComposerEvent;

class ComposerScript
{

    public static function postInstall(ComposerEvent $event)
    {

        $vendorDir = $event->getComposer()->getConfig()->get('vendor-dir');

        require $vendorDir . '/autoload.php';

        echo 'class exist: ';
        var_dump(class_exists('Modules\Common\Services\RouterService'));

        $router = new \Modules\Common\Services\RouterService();
    }
}

在运行之后composer install 输出:

Generating autoload files ComposerScript\ComposerScript::postInstall

class exist: bool(false)

PHP Fatal error: Class 'Modules\Common\Services\RouterService' not found in /var/www/project/ComposerScript.php on line 19

当来自 apache autoloader 的 运行 项目正常工作时。 它也在本地工作。 可能是一些服务器配置,但是哪一个....

感谢任何帮助或参考。

问题是 PSR-4 自动加载:

http://www.php-fig.org/psr/psr-4/

文件夹首字母大写,如 class 名称:

{
  "autoload": {
      "psr-4": {
        "Modules\": "Modules/",
        "ComposerScript\": ""
      }
  }
}


$router = new \Modules\Common\Services\RouterService();

应该匹配:

-Modules
 -Common
  -Services
   -RouterService.php