编写器没有自动加载通过存储库包含的文件>类型比;路径


Composer not autoloading files included through repositories > type > path

问题

我有两个PSR-4 composer项目,我希望从一个到另一个,文件结构如下:

projectfoo
-public
--index.php
-src
--CompanyName
---Foo
----Foo.php
-composer.json
projectbar
-src
--CompanyName
---Bar
----Bar.php
-composer.json

作曲家。Json文件为projectfoo定义为(注意存储库>类型>路径依赖):

{
    "name": "companyname/foo",
    "require": {
        "companyname/bar": "*"
    },
    "repositories": [
        {
            "type": "path",
            "url": "../projectbar"
        }
    ],
    "autoload": {
        "psr-4": {
            "CompanyName''": "src/CompanyName"
        }
    }
}

和projectbar为:

{
    "name": "companyname/bar",
    "version": "1.0.0",
    "autoload": {
        "psr-4": {
            "CompanyName''": "src/CompanyName"
        }
    }
}

正确运行composer update会生成包含companyname/foo文件夹的vendor文件夹。

index.php在项目foo我有:

require_once '../vendor/autoload.php';
$bar = new 'CompanyName'Bar'Bar();

但是,当运行'CompanyName'Bar'Bar时,没有定义。


<标题>

为什么Bar不被包含在autoload.php文件?


我已经试过了

  • 使用以下命令刷新自动加载文件:composer installcomposer updatecomposer dump-autoload
  • 将供应商名称CompanyName更改为其他名称
  • 查看vendor'composer文件夹中的installed.json文件,酒吧项目被列为:

#

{
    "name": "companyname/bar",
    "version": "1.0.0",
    "version_normalized": "1.0.0.0",
    "dist": {
        "type": "path",
        "url": "../companyname/bar",
        "reference": "f35ed0ad82c8280db9b603712dd256074f99e196",
        "shasum": null
    },
    "type": "library",
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "CompanyName''": "src/CompanyName",
        }
    }
}
    奇怪的是,当引导autolload .php文件到phpunit时,这些文件会自动正确加载,并且在我的测试类中可用。

问题围绕着编写者链接"路径"的方式展开使用符号链接的项目。


<标题>

因为我是在windows系统上开发的,并在Ubuntu流浪盒上执行代码,所以在windows上设置的符号链接在运行composer install时被解析为盒子内的破碎路径。这也解释了为什么在windows上运行的测试能够找到Bar,而在虚拟机中运行的测试却无法找到。


<标题> 解决方案

为了解决这个问题,我最初强迫composer镜像项目而不是符号链接它,然而,这仍然导致了供应商文件夹中的符号链接问题。

我现在已经开始在单独的存储库中托管我的库,并使用"type": "vcs"标签导入它们,这很好地工作。当有新的提交时,Composer也会处理更新包,这在使用带有镜像的"type": "path"标签时不会发生。