dreamfactory/installers

多框架Composer库安装程序

安装: 43

依赖者: 0

建议者: 0

安全: 0

星星: 1

关注者: 11

分支: 413

类型:composer-installer


README

Build Status

这是供PHP包作者在他们的composer.json中使用的。它将根据指定的包类型将他们的包安装到正确的位置。

installers的目标是一个简单的包类型,用于安装路径映射。用户也可以为每个包自定义安装路径,包作者可以在安装时修改包名。

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

原生支持的框架:

以下框架与Composer原生兼容,并将安装到默认的vendor目录。安装这些框架的包不需要composer/installers

  • Aura
  • Symfony2
  • Yii
  • Yii2

当前支持的包类型:

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

示例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/installers的包,你可以在你的composer.json中使用以下额外配置来覆盖安装路径

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

包类型可以具有自定义安装路径,带有type:前缀。

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

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

自定义安装名称

如果你是包作者,并且希望在安装时你的包有不同的名称,请考虑使用installer-name额外配置。

例如,你有一个名为shama/cakephp-ftp的包,类型为cakephp-plugin。使用composer/installers安装将安装到路径Plugin/CakephpFtp。由于命名约定很严格,你作为包作者实际上需要将包命名为Plugin/Ftp并安装。在你的packagecomposer.json中使用以下配置可以实现这一点

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

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

贡献!

  • 分支并克隆.
  • 运行命令php composer.phar install --dev安装开发依赖项。请参阅Composer
  • 使用命令phpunit运行测试。请参阅PHPUnit
  • 创建一个分支,提交,推送,并给我们发送一个pull request

为确保代码库的一致性,请确保代码遵循我们从Symfony借用的编码标准

如果您想帮忙,请查看问题列表

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

这是什么?允许包作者确定包将被安装的位置,无论是通过在他们的composer.json中直接设置路径,还是通过动态包类型:"type": "framework-install-here"

这已经被多次提出。甚至在早期实现过一次,然后又被移除。因为这将允许单个包作者在用户未同意的情况下删除整个文件夹。然后,那个用户就会来这里向我们大喊大叫。