首页 文章

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

提问于
浏览
0

问题

我有两个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文件夹的vendor文件夹 .

在projectfoo的 index.php 中,我有:

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

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

但是,运行时 \CompanyName\Bar\Bar 未定义 .


这个问题

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


我尝试了什么

  • 使用以下方法刷新自动加载文件: composer install composer update composer 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",
        }
    }
}
  • 奇怪的是,当将autoload.php文件引导到phpunit时,文件自动加载并且在我的测试类中可用 .

1 回答

  • 1

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


    简而言之

    因为我在Windows系统上开发并在Ubuntu vagrant box上执行代码,所以在Windows上设置符号链接,当运行 composer install 时解析为框内的破坏路径 . 这也解释了为什么在Windows上运行的测试设法找到 Bar 而不是在虚拟框中运行的测试 .


    解决方案

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

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

相关问题