【问题标题】:My composer package's namespace doesn't show in the autoload_psr4 file我的作曲家包的命名空间没有显示在 autoload_psr4 文件中
【发布时间】:2015-08-19 22:24:01
【问题描述】:

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

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

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

我在网上和 stackoverflow 上环顾四周,但我发现的各种答案和建议并没有解决问题。

谁能看到我错过了什么?

更新

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

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

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

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

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

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

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

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

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

【问题讨论】:

  • 它还没有在 packagist 中,所以你需要告诉 Composer 在源代码管理中的哪里找到它,然后 composer install 会找到并安装它 getcomposer.org/doc/… 但我希望作曲家报告执行composer install时找不到包的错误。
  • 如果我已经手动将包移动到供应商文件夹中并且作曲家转储自动加载,那是否有必要?如果只是自动加载命名空间,我认为 composer 不需要 packagist。
  • 不确定 - 我一直添加一个 repositories 键来指向源代码库。我从未尝试将它们放入vendor/
  • 这可能是因为您已经有一个锁定文件正在被install 命令读取。将存储库位置添加到您的 composer.json 中,然后运行 ​​composer update Documentation explains the difference
  • 所以我删除了锁定文件,运行了 composer update,但它仍然没有将我的命名空间添加到自动加载文件中。我通读了文档,锁定文件听起来仍然像是处理下载包而不是生成自动加载文件。我再次阅读了关于自动加载的部分,听起来我所做的仍然有效。我仍然缺少一些东西。

标签: php composer-php autoload


【解决方案1】:

将库移动到 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 来解决这个问题。

【讨论】:

  • 我相信这让我更接近了,但我仍然遇到了问题。我会更新最初的问题。
  • @ChrisSchmitz 如果您将库提交到 master 分支,请在 Laravel 项目中将 "cschmitz/l5-simplefm": "dev-develop" 替换为 "cschmitz/l5-simplefm": "dev-master"
  • 试过了,我仍然从我的更新中得到“没有找到有效的 composer.json 文件”错误。我还需要在库 composer.json 文件中设置不同的内容吗?
  • 查看完所有内容后,我注意到由于某种原因,即使我看到了 git 列表中的文件,我的包的 L5SimpleFM 子文件夹也没有被跟踪。我删除了我的 .git 文件夹,再次对其进行了初始化,添加了所有内容(确保跟踪 L5 文件夹的内容),提交,更新了作曲家并观察了我的包从我的本地存储库中拉入。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2014-09-13
  • 2014-10-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-07
  • 2018-08-30
相关资源
最近更新 更多