我正在 monorepo 架构中编写 WordPress 插件,这是我的目录结构:
packages/
├── plugin
└── dependencie-1
在
dependencie-1
中,我在composer.json中配置了psr-4自动加载:
"autoload": {
"psr-4": {
"Mdorim\\": "src/php/"
}
}
在
plugin
中,我的composer.json如下:
"autoload": {
"psr-4": {
"LCDR\\": "./src/php",
"LCDR\\Tests\\": "./tests/Pest"
}
},
"repositories": [
{
"type": "path",
"url": "../mdorim"
}
],
"require": {
"monorepo/mdorim": "@dev"
},
在
plugin
的主文件中,我需要供应商提供自动加载器
require '../vendor/autoload.php'
虽然我可以通过配置自动加载器访问
plugin
中的所有类,但我无法使用 dependencie-1
中的类,并且不断收到此错误:
PHP Fatal error: Uncaught Error: Class "Mdorim\Core" not found in /var/www/html/wp-content/plugins/elucidario-art/lcdr.php:52
显然,依赖项中的类不在
plugin
的主路径中,而是在其 vendor
目录中。 psr-4 不应该解决这个问题吗?我是不是错过了什么?
这可能是 docker 无法解析符号链接目录的原因,因为它在 phpunit 配置的测试中工作正常。 但是,如果我在composer.json的dependencie-1的存储库配置中使用符号链接选项 false ,则不会发生任何事情:
"repositories": [
{
"type": "path",
"url": "../mdorim",
"options": {
"symlink": false
}
}
],
我实际上解决了符号链接选项标记为 false 的问题,但我必须删除composer.lock并再次安装它。