如何基于框架内的组件为作曲家安装程序设置不同的路径

时间:2016-01-04 15:28:29

标签: php path installer composer-php

我一直致力于PHP Framework开发,我们希望将这些组件从核心分离到单独的包中。像这样:

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
};

有可能吗?

我个人已经尝试过Composer 作曲家/安装程序,但无法弄清楚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"
        }
    }
],

1 个答案:

答案 0 :(得分:0)

你看过Composer Custom Installer documentation了吗?它做到了。

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

旁白:我的感觉是,对composer/installers进行了一些实验,它可能不支持自定义类型,但可能允许您为受支持的类型设置自定义路径。也就是说:如果您想使用WordPress插件,但将其安装在与正常情况不同的地方,则可以覆盖install-paths,但您无法使用composer/installers来定义自己的类型{ {1}}具有自定义安装位置。我强烈地强调,这种推断是基于今天早上试验它的经验经验,而不是实际的文件。 ;)