如何在软件包而非项目上设置软件包的安装目录?

时间:2019-11-26 10:12:32

标签: php composer-php packagist

我正在创建自定义作曲家程序包。 composer软件包必须安装到自定义文件夹,而不是我希望将其安装在packages /中的vendors /目录。这就是我的composer.json的样子:

{
"name": "demo/contentfeed",
"description": "This is yet another Lumen composer package wrapper",
"type": "lumen-plugin",
"version": "1.1.5",
"keywords": ["demo","lumen","drupal"],
"homepage": "https://github.com/gauravmehrasrijan/lumen-feeds",
"require": {
    "composer/installers": "^1.0.24"
},
"autoload": {
    "psr-4": {
        "demo\\Contentfeed\\": "/src"
    }
},
"extra": {
    "installer-name": "packages",
    "installer-paths": {
        "packages": ["demo/contentfeed"]
    }
},
"license": "MIT",
"minimum-stability": "dev",
"authors": [
    {
        "name": "Gaurav Mehra",
        "email": "gauravmehra1987@gmail.com"
    }
]
}

在跳到这里之前,我还尝试过this link中发布的解决方案,但是它对我不起作用,我额外添加了安装程序名称密钥,但没有成功。

2 个答案:

答案 0 :(得分:2)

这是不可能的,文档says so explicitly

  

[...]软件包作者可以通过直接在composer.json中设置路径或通过动态软件包类型来确定将软件包安装在何处的能力:“ type”:“ framework-install-here “。

     

已经提出了很多次。甚至早实施一次,然后删除。 安装程序不会执行此操作,因为这将允许单个程序包作者在未经用户同意的情况下清除整个文件夹。然后那个用户会来这里对我们大喊。

(强调我的)

您正在使用的两个键(installer-pathsinstaller-name)的作用与您想象的不同:

  • installer-name:允许软件包创建者(您)说您的软件包应安装在与vendor/name不同的目录下。对于您而言,它不是安装在vendor/demo/contentfeed上,而是安装在vendor/demo/packages下(因为您在composer.json中进行了设置)
  • installer-paths:允许软件包消费者为特定的一个或多个软件包或软件包家族设置自定义安装路径。在软件包composer.json上无效,此设置仅适用于项目配置。

答案 1 :(得分:-1)

您可以将config部分添加到composer.json中,并在其中定义“ vendor-dir”

{
"name": "demo/contentfeed",
"description": "This is yet another Lumen composer package wrapper",
"type": "lumen-plugin",
"version": "1.1.5",
"keywords": ["demo","lumen","drupal"],
"homepage": "https://github.com/gauravmehrasrijan/lumen-feeds",
"require": {
    "composer/installers": "^1.0.24"
},
"autoload": {
    "psr-4": {
        "demo\\Contentfeed\\": "/src"
    }
},
"license": "MIT",
"minimum-stability": "dev",
"authors": [
    {
        "name": "Gaurav Mehra",
        "email": "gauravmehra1987@gmail.com"
    }
],
"config": {
    "vendor-dir": "packages/"
}
}

参考:

https://getcomposer.org/doc/06-config.md#vendor-dir