提问者:小点点

我可以为我的包指定一个根文件夹(相对于项目根文件夹)composer.json?


我有一个关于作曲家的问题。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


共1个答案

匿名用户

有一个wikimedia composer合并插件,可以在目录中搜索composer。JSON并将其安装到您的根供应商中。

https://github.com/wikimedia/composer-merge-plugin

有了这个,你可以在其他地方设置你的插件,作曲家将从这一点安装它们。

也许这能解决你的问题?