rikudou / installer
用于包自动配置的Composer插件
Requires
- php: ^7.1
- composer-plugin-api: ^1.1
- ext-json: *
- rikudou/array-sort: ^1.0
- rikudou/reflection-file: ^1.2.1
- symfony/yaml: ^4
Requires (Dev)
- composer/composer: ^1.7
- friendsofphp/php-cs-fixer: ^2.14
- phpstan/phpstan: ^0.11.2
- phpunit/phpunit: ^7.4
README
此Composer插件允许您将配置与支持的工程项目类型一起打包。
一旦此包在您的项目中安装,它就会负责配置您的包。
安装
composer require rikudou/installer
使用
如果您想在您的包中使用安装器,只需将其添加为依赖项并创建配置目录 .installer
。
.installer
目录具有以下结构
.installer/[project-type-directory]/[operation-type]
项目类型
目前仅支持Symfony 4项目类型,但您可以在您的包中定义自己的类型(更多内容见下文)。
Symfony 4项目类型
- 可用目录
symfony4
symfony
- 示例目录
.installer/symfony4/[operation-type]
.installer/symfony/[operation-type]
- 通过检测
- 目录
config/packages
的存在
- 目录
- 机器名
symfony4
覆盖项目类型 composer.json
如果您想在无法检测到项目类型的情况下为项目设置项目类型,可以在您的 composer.json 中设置 extra.rikudou.installer.project-type
,其值应该是所需项目类型的机器名。
如果不存在该类型的处理程序,它将被忽略,并且仍然会进行检测。
示例
{ "require": { "php": ">=7.2" // your other dependencies }, "extra": { "rikudou": { "installer": { "project-type": "symfony4" } } } }
注意:JSON 不支持注释,如果您复制上面的片段,请删除它们
操作类型
复制文件操作
将从操作目录 (files
) 中的所有内容复制到项目的根目录。
在卸载包时,将删除与包中定义的内容相同的任何文件,并删除目录结构中定义的任何空目录。
- 目录结构
.installer/[project-type-dir]/files
- 示例目录
.installer/symfony4/files
.installer/symfony/files
- 示例完整目录结构
.installer/symfony/files/config/packages/my_config_file.yaml
环境变量操作
在 .env
文件中定义您的环境变量,内容将被复制到项目根目录中的 .env
、.env.dist
和 .env.example
文件(如果这些文件存在)。
在卸载包时,将从受影响的文件中删除环境变量。
- 目录结构
.installer/[project-type-dir]/.env
- 示例文件路径
.installer/symfony4/.env
.installer/symfony/.env
Bundle 注册操作
编写一个将附加到Symfony中的 bundles.php 文件的配置包。
在卸载软件包时,捆绑配置将被删除。
- 目录结构
.installer/[项目类型目录]/bundles.php
- 示例文件路径
.installer/symfony4/bundles.php
示例内容
<?php return [ Vendor\MyCoolBundle::class => ['all' => true], ];
禁用 Rikudou 安装程序
您可以通过 composer.json 配置禁用您项目的 Rikudou 安装程序。
- 将
extra.rikudou.installer.enabled
设置为false
- 将软件包名称添加到
extra.rikudou.installer.exclude
数组中,以忽略特定软件包的安装程序
示例
{ "require": { "php": ">=7.2" // your other dependencies }, "extra": { "rikudou": { "installer": { "enabled": false, // disable the installer "exclude": [ "vendor/package" // exclude composer package called vendor/package ] } } } }
注意:JSON 不支持注释,如果您复制上面的片段,请删除它们
定义自定义项目类型
如果您想支持非默认项目类型,请在您的软件包中定义位于 .installer/project-types
目录的 php 类,这些类实现了 Rikudou\Installer\ProjectType\ProjectTypeInterface
接口方法和它应该返回的内容在接口的 PHPDoc 中描述。
定义的类型类的名称或命名空间无关紧要,但您应避免使用未命名空间类,因为可能存在名称冲突。