【问题标题】:composer autoload error作曲家自动加载错误
【发布时间】:2016-07-08 21:28:17
【问题描述】:

我正在尝试与作曲家合作,并将创建自己的包。我的包项目具有以下文件结构:

scr/Scheduler.php
.gitignore
composer.json

测试类:

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 存储库。目前我只有主分支,没有标签。 我的第二步是使用以下 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

同时 composer 创建一个空的 autoload_psr4 文件。

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

return array(
);

我认为我的架构中可能存在一些问题...

【问题讨论】:

  • 您能展示一下您在主项目中注册私有存储库的方式吗?您可以混淆 URL 以使其保持私密
  • @ChristopheCoevoet 我已经更新了 composer.json sn-p。我还在描述中添加了以下行:Currently I've only the master branch and no tags.
  • 我假设您在代码 sn-p 的错误部分添加了 repositories 部分(因为在 david/scheduler 存储库中引用 david/scheduler 没有意义)。我基于此在下面回答。
  • @ChristopheCoevoet 哦,是的。复制粘贴失败。感谢您的帮助

标签: php composer-php packages


【解决方案1】:

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

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

根包应如下所示:

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

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 2013-12-09
    • 2018-05-07
    • 1970-01-01
    • 2013-03-05
    • 2015-09-24
    • 2018-06-15
    • 2014-09-14
    相关资源
    最近更新 更多