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