composer/installers

支持多框架的Composer库安装器

安装次数: 99,636,392

依赖者: 7,145

建议者: 33

安全: 0

星标: 1,427

关注者: 49

分支: 414

开放问题: 13

类型:composer-plugin


README

Continuous Integration

这是为PHP包作者准备的,可以在他们的composer.json中要求使用。它将根据指定的包类型将他们的包安装到正确的位置。

Installers的目标是成为一个简单的包类型安装路径映射。用户还可以按包定制安装路径,包作者可以在安装时修改包名。

Installers并不打算取代所有自定义安装器。如果你的包需要特殊的安装处理,那么完全可以创建一个自定义安装器来处理

原生支持的框架:

如今,大多数框架都原生支持Composer,并且将被安装到默认的vendor目录。使用这些框架安装包时,不需要composer/installers

Composer 2.1+的替代方案

从Composer 2.1开始,Composer\InstalledVersions类有一个getInstalledPackagesByType方法,可以在运行时确定安装了哪些插件/模块/扩展。

如果你正在构建一个新的应用程序,强烈建议使用该方法而不是构建新的自定义安装器。这有一个优点,即保留所有供应商代码在供应商目录中,并且不需要自定义安装器代码。

当前支持的包类型

稳定类型被标记为粗体,这意味着这些类型的安装路径将不会改变。对这些类型的任何调整都需要创建全新的类型,以涵盖所需的变化。

示例composer.json文件

这是一个为CakePHP插件准备的示例。在你的composer.json文件中需要设置的唯一重要部分是"type": "cakephp-plugin",它描述了你的包是什么,以及"require": { "composer/installers": "~1.0" },它告诉Composer加载自定义安装器。

{
    "name": "you/ftp",
    "type": "cakephp-plugin",
    "require": {
        "composer/installers": "~1.0"
    }
}

当用户运行php composer.phar install时,这将安装你的包到CakePHP应用的Plugin/Ftp/文件夹。

因此,将你的包提交到packagist.org

自定义安装路径

如果你需要有一个支持类型的包,你可以通过在你的composer.json中使用以下额外内容来覆盖安装路径

{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"]
        }
    }
}

你可以使用type:前缀为特定类型的所有包确定非标准安装路径。类型必须是上面支持的列表中的一个。

{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["type:wordpress-plugin"]
        }
    }
}

你也可以使用vendor:前缀将特定供应商的所有包安装到自定义安装路径。路径仍然只适用于具有支持列表中类型的供应商的包。

{
    "extra": {
        "installer-paths": {
            "your/custom/path/{$name}/": ["vendor:my_organization"]
        }
    }
}

这将使用你的自定义路径为每个匹配的包。你可以使用在路径中使用以下变量:{$name}{$vendor}{$type}

注意:如果为同一包有多个自定义安装器路径匹配,则将使用第一个匹配项。

自定义安装名称

如果您是软件包作者,并且需要软件包在安装时使用不同的名称,请考虑使用installer-name附加组件。

例如,您有一个名为shama/cakephp-ftp的软件包,类型为cakephp-plugin。使用composer/installers安装时,将安装到路径Plugin/CakephpFtp。由于严格的命名约定,实际上您作为软件包作者需要将软件包命名为并安装到Plugin/Ftp。在您的package composer.json中添加以下配置将允许这样做:

{
    "name": "shama/cakephp-ftp",
    "type": "cakephp-plugin",
    "extra": {
        "installer-name": "Ftp"
    }
}

请注意,输入到installer-name中的名称将是最终的,并且不会变形。

禁用安装器

可能会有时候您想要禁用composer/installers中的一个或多个安装器。例如,如果您正在管理一个使用特定框架安装器且与composer/installers冲突的软件包或项目,同时也有一个依赖composer/installers的软件包。

可以通过指定额外的installer-disable属性来禁用项目中的安装器。如果设置为true"all""*",则所有安装器都将被禁用。

{
    "extra": {
        "installer-disable": true
    }
}

否则,可以指定单个安装器或安装器数组。

{
    "extra": {
        "installer-disable": [
            "cakephp",
            "drupal"
        ]
    }
}

注意:如果使用全局禁用值(true"all""*")并且在数组中使用,它将优先于单个安装器名称。以下示例将禁用所有安装器。

{
    "extra": {
        "installer-disable": [
          "drupal",
          "all"
        ]
    }
}

我们应该允许动态软件包类型或路径吗?不

它们是什么?允许软件包作者通过在他们的composer.json中直接设置路径或通过动态软件包类型:"type": "framework-install-here"来确定软件包将被安装的位置。

这已经被提出过很多次。甚至在早期实施过一次,然后又移除了。安装器不会这样做,因为这将允许单个软件包作者在没有用户同意的情况下清除整个文件夹。然后那个用户会来这里向我们大喊。

任何仍然想要这个功能的人应该考虑要求https://github.com/oomphinc/composer-installers-extender