Composer 不自动加载通过存储库 > 类型 > 路径包含的文件

Composer not autoloading files included through repositories > type > path

问题

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

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

composer.json 文件为 projectfoo 定义为(注意存储库 > 类型 > 路径依赖):

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

项目栏为:

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

运行 composer update 正确生成包含 companyname/foo 文件夹的供应商文件夹。

在 projectfoo 的 index.php 中我有:

require_once '../vendor/autoload.php';

$bar = new \CompanyName\Bar\Bar();

然而,当 运行 \CompanyName\Bar\Bar 未定义时。


问题

为什么 Bar 没有包含在 autoload.php 文件中?


我试过的

#

{
    "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",
        }
    }
}

问题围绕作曲家使用符号链接链接“路径”项目的方式。


简而言之

因为我在 windows 系统上开发并在 Ubuntu vagrant box 上执行代码,符号链接在 windows 上设置,当 运行ning composer install 正在解决盒子内的破损路径。这也解释了为什么 windows 上的测试 运行 设法找到 Bar 而不是虚拟框中的测试 运行。


解决方案

为了解决这个问题,我最初强制作曲家镜像项目而不是符号链接,但是,这仍然导致供应商文件夹中的符号链接出现问题。

我现在开始在单独的存储库中托管我的库,并使用运行良好的 "type": "vcs" 标签导入它们。 Composer 还会在进行新提交时处理更新包,这在使用带镜像的 "type": "path" 标记时不会发生。