作曲家自动加载错误

composer autoload error

我正在尝试使用 composer 并将创建自己的程序包。我的包项目具有以下文件结构:

scr/Scheduler.php
.gitignore
composer.json

测试class:

namespace david\Scheduler;

use Symfony\Component\Yaml\Parser;

class Scheduler
{
    private $yamlParser;

    public function __construct()
    {
        $this->yamlParser = new Parser();
    }
}

和 composer.json 文件

...
"require": {
    "symfony/yaml": "~3.0.3"
},
"autoload": {
    "psr-4": {
        "david\Scheduler\": "src/"
    }
}

我已将所有内容提交给私有 github 存储库。目前我只有 master 分支,没有标签。 我的第二步是使用以下 composer.json 文件创建一个客户端项目:

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "david/scheduler",
            "type": "package",
            "version": "dev-master",
            "source": {
                "url": "git@github.com:david/scheduler.git",
                "type": "git",
                "reference": "master"
            }
        }
    }
],
"require": {
    "david/scheduler": "dev-master"
}

当我 运行 composer update 时,github 项目将被克隆并存储在 vendor 目录中。但只有我的包裹。 symfony/yaml 的依赖项将不会加载。

vendor
    composer
    david/scheduler

同时作曲家创建一个空的 autoload_psr4 文件。

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
);

我想我的架构可能存在一些问题...

您的问题是您正在使用 package 类型注册您的自定义存储库,这意味着根包正在定义 david/scheduler 的元数据和 composer.json 文件中的git Composer 从未使用过 repo。在这个包定义中,没有对 symfony/yaml 组件的依赖,也没有自动加载你的调度程序 class.

作为一般规则,package 存储库应始终被视为最后的手段(它有很多缺点)。当您控制 git 存储库时,将 composer.json 文件放入存储库并使用 vcs 存储库效果更好(因为 composer 可以依赖来自 git 本身的元数据,包元数据在包 git 存储库中提供。

根包应该是这样的:

{
    "repositories": [
        {
            "type": "vcs",
            "url": "git@github.com:david/scheduler.git"
        }
    ],
    "require": {
        "david/scheduler": "dev-master"
    }
}