如何根据框架内的组件为composer安装程序设置不同的路径


How to set a different path for composer installer based on components inside a framework

我一直在开发PHP框架,我们想将组件从核心分离成单独的包。像这样:

vendor /
    username/frameworkname /
        core/
            Namespace /
                Core /
                    ..Framework core files here
        components/
            Namespace /
                Component
                    ComponentOne
                        ClassOne.php
                        ClassTwo.php
                        composer.json
                        LICENSE.txt
                        README.md
                    ComponentTwo
                        ClassOne.php
                        ClassTwo.php
                        ClassThree.php
                        composer.json
                        README.md
                        LICENSE.txt
                    ComponentHopeYouFotIT!

像这样的作曲家需要的核心:

composer require name/framework-core

并且能够将其安装在中

vendor/username/frameworkname/src/core/Namespace/Core/

任何像这样的组件:

composer require name/componentname

并且能够将其安装在:中

vendor/username/frameworkname/src/components/Namespace/Component/

这样我们就不必为任何新组件创建单独的文件夹,并且可以像这样使用:

use Namespace'Core'CoreClass;
use Namespace'Component'{
    ComponentOne'ClassTwo, 
    ComponentTwo'ClassOne
};

有可能吗?

我个人曾尝试过ComposerComposer/installers,但无法在Composer.json中找到正确的设置。

"config": {
    "vendor-dir": "vendor/username"
},
"repositories": [
    {
        "type": "package",
        "package": {
        "name": "frameworkname/componentname",
            "version": "master",
            "source": {
                "url": "https://github.com/username/componentname",
                "type": "git",
                "reference": "master"
            }
        },
        "require": {
            "composer/installers": "~1.0"
        }
    }
],

您看过Composer自定义安装程序文档吗?它做到了这一点。

tl;dr是,你需要创建一个(非常简单)Composer插件来设置自定义安装位置,文档会非常具体地引导你完成它。

旁白:我对composer/installers进行了一些实验,我的感觉是它可能不支持自定义类型,但可能允许您为支持的类型设置自定义路径。也就是说:如果你想使用WordPress插件,但将其安装在不同于正常情况的地方,你可以覆盖install-paths,但你不一定要使用composer/installers来定义你自己的类型whooptido-type和自定义安装位置。我极力强调,这一推断是基于今天上午对其进行实验的经验,而不是实际的文件。)