我的作曲家包的名称空间不会显示在autoload_psr4文件

时间:2015-08-18 19:54:27

标签: php composer-php autoload

我正在创建我的第一个作曲家包。我将它拉入香草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文件夹中的包文件夹结构:

vendor folder structure

我的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
    );

我在网上查看了stackoverflow,但我发现的各种答案和建议并没有解决问题。

任何人都能看到我失踪的东西吗?

更新

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

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

然后我将从cschmitz目录开始的包文件夹移动到我的laravel项目的同一级别。文件结构现在看起来像这样:

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

最初我遇到了错误"没有发现驱动程序来处理VCS存储库vendor / cschmitz"。在阅读了一下后,我发现能够使用这种本地存储库,repo本身需要受版本控制(即git,svn等)。说得通。我还没有将它置于版本控制之下,因为这只是一个用于尝试开发软件包的测试项目。

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

  

[作曲\库\ InvalidRepositoryException]     在../cschmitz/L5SimpleFM的任何分支或标记中找不到有效的composer.json,无法从中加载包。

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

composer.json in local repository's git repo

是否存在阻止我的Laravel项目查看本地存储库的composer.json文件的内容?

1 个答案:

答案 0 :(得分:0)

仅在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库,您将注意到您需要提交对库的更改,然后再在Laravel项目中再次运行composer update你可以使用这些变化。关于如何规避这个问题,你有一些解决方案here