我有一个关于composer.json及其自动加载部分的问题。
给定:我有很多模块,它们位于{projectRoot}/app/code/VendorName或vendor/vendor名称中示例:
app/code/VendorName/ModuleACore
app/code/VendorName/ModuleBCore
app/code/VendorName/ModuleBAddon
app/code/VendorName/ModuleBSubModuleA
app/code/VendorName/ModuleBSubModuleB
app/code/VendorName/ModuleBSubModuleC
app/code/VendorName/ModuleCCore
app/code/VendorName/ModuleCAddon
app/code/VendorName/ModuleCSubModuleA
app/code/VendorName/ModuleCSubModuleB
app/code/VendorName/ModuleCSubModuleC
等等。我不能把这些模块合并成一个,因为这是一个巨大的可扩展的东西。客户可以安装几个模块来满足他们的需求,如果他们需要一些额外的功能——他们可以通过安装他们需要的子模块来扩展解决方案。所以,它无法合并。。。
每个模块都有自己的composer.json,如下所示:
{
"name": "vendor-name/module-name",
...
"autoload": {
...
"psr-4": {
"VendorName\ModuleName\": ""
}
}
}
此外,所有这些都可以安装在{projectRoot}/供应商/供应商名称/*中
那么,有没有一种方法可以用每个模块的composer.json文件构建这样的树:
app
code
VendorName
ModuleA
ModuleACore
ModuleB
ModuleBCore
ModuleBAddon
ModuleBSubModules
ModuleBSubModuleA
ModuleBSubModuleB
ModuleBSubModuleC
ModuleC
ModuleCCore
ModuleCAddon
ModuleCSubModules
ModuleCSubModuleA
ModuleCSubModuleB
ModuleCSubModuleC
我在谷歌上找到的只是自动加载部分的psr-4,但它只指定了包文件夹中包文件的路径。像
"VendorName\ModuleName\": "src/" // -> app/code/VendorName/ModuleName/src/*
// or vendor/vendor-name/module-name/src/*
但我需要指定VendorName和ModuleName之间的一部分路径,并且我需要它适用于两种安装方式:项目源(app/code/(或供应商(vendor/(
我发誓我在一个供应商代码中看到了它,但我不记得了,他们是如何做到的…
Sowy有点模糊的例子,但NDA:(C
有一个wikimedia composer合并插件,它可以在目录中搜索composer.jsons,并将它们安装在根供应商中。
https://github.com/wikimedia/composer-merge-plugin
有了这个,你可以在其他地方设置你的插件,composer将从这一点开始安装它们。
也许这能解决你的问题?