autoload_psr4 文件中没有显示我的 composer 包的命名空间

My composer package's namespace doesn't show in the autoload_psr4 file

我正在创建我的第一个作曲家包。我正在通过将其拉入普通 Laravel 项目来对其进行测试。

我遇到的问题是,当我在主 Laravel composer.json 文件中需要我的作曲家包,然后尝试更新自动加载。

我的包裹composer.json:

{
    "name": "cschmitz/l5-simplefm",
    "description": "A Laravel 5 wrapper for Soliant Consulting's SimpleFM package.",
    "require": {
        "soliantconsulting/simplefm": "3.0.*"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "cschmitz",
            "email": "schmitz.chris@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "L5SimpleFM\": "src/"
        }
    }
}

我的包在 Laravel 项目的 vendor 文件夹中的文件夹结构:

我的 Laravel 项目的 composer.json:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.5.9",
        "laravel/framework": "5.1.*",
        "cschmitz/l5-simplefm": "dev" // Requiring my package here
    },
    ...

在此之后,我进行了composer dump-autoload。我没有从作曲家那里得到任何错误,但是当我检查我的 vendor/composer/autoload_psr4.php 文件时,我的命名空间没有列在数组中:

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

    return array(

        ...
        'App\' => array($baseDir . '/app'),


        // I expected to see `'L5SimpleFM\' => array($vendorDir . '/cschmitz/L5SimpleFM/src')` as the last key of this array, but nothing shows past the App key
    );

我在网上和Whosebug上看了看,但我找到的各种答案和建议都没有解决问题。

谁能看到我遗漏了什么?

更新

根据 Alexandru Guzinschi 的回答,我尝试通过将以下块添加到我的 Laravel 项目的 composer.json 文件中来告诉我的 Laravel 项目有一个要检查的本地作曲家存储库:

"repositories":[
    {
        "type": "vcs",
        "url": "../cschmitz/L5SimpleFM"
    }
],    

然后我将从 cschmitz 目录开始的包文件夹移到与我的 laravel 项目相同的级别。文件结构现在如下所示:

LaravelProjectFolder/
    composer.json
cschmitz/
    L5SimpleFM/
        composer.json

最初我运行进入错误"No driver found to handle VCS repository vendor/cschmitz"。阅读了一下后,我发现要能够使用这种本地存储库,存储库本身需要处于版本控制之下(即 git、svn 等)。说得通。我还没有将它置于版本控制之下,因为这只是一个用于尝试开发包的测试项目。

我在 Laravel 项目和 运行 composer update 的根目录下创建了一个 git 存储库。现在我收到错误:

[Composer\Repository\InvalidRepositoryException] No valid composer.json was found in any branch or tag of ../cschmitz/L5SimpleFM, could not load a package from it.

这令人困惑,因为我可以 ls ../cschmitz/L5SimpleFM/composer.json 并查看该文件。我还可以 运行 git ls-tree -r master --name-only 并在本地存储库版本控制中查看 composer.json 文件:

有什么东西会阻止我的 Laravel 项目看到本地存储库的 composer.json 文件吗?

将您的库移动到 vendor 目录中是不够的,因为 Composer 不会扫描该目录并且不知道您的更改。

您需要通过将您的包发布到 Packagist 或从本地文件系统加载它来告诉 Composer 您的包。在您的 Laravel 项目 composer.json 文件中,更改:

"repositories": [
        {
            "type": "vcs",
            "url": "/path/to/cschmitz"
        }
],
"require": {
    "cschmitz/l5-simplefm": "dev-develop"
}

接下来您需要 运行 composer update 以便安装您的库。


与您当前的问题无关,但很快就会成为一个问题:

执行此操作并继续处理 cschmitz/l5-simplefm 库后,您会注意到需要提交对库所做的更改,然后 运行 composer update在您可以使用这些更改之前再次在您的 Laravel 项目中。关于如何规避此问题,您有一些解决方案 here