我有两个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文件中?
composer install
composer update
composer dump-autoload
CompanyName
更改为其他名称。installed.json
文件夹中的vendor\composer
文件,该项目列为:#
{
"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",
}
}
}
答案 0 :(得分:1)
问题围绕作曲家链接的方式和#34;路径"使用符号链接的项目。
因为我在Windows系统上开发并在Ubuntu流浪盒上执行代码,所以在Windows上设置的符号链接在运行composer install
时解析为框内的破坏路径。这也解释了为什么在Windows上运行的测试设法找到Bar
而不是在虚拟框中运行测试。
为了解决这个问题,我最初强迫作曲家镜像项目而不是符号链接,但是,这仍然会导致供应商文件夹中的符号链接出现问题。
我现在已经开始在单独的存储库中托管我的库并使用"type": "vcs"
标记导入它们。 Composer还会在新提交时处理更新包,而在使用"type": "path"
标记进行镜像时不会发生这种情况。