williarin / cook
执行包中嵌入的食谱的Composer插件
Requires
- php: >=8.0
- composer-plugin-api: ^2.3
- ext-json: *
- colinodell/indentation: ^1.0
- symfony/config: ^5.4 || ^6.0 || ^7.0
- symfony/dependency-injection: ^5.4 || ^6.0 || ^7.0
- symfony/filesystem: ^5.4 || ^6.0 || ^7.0
- symfony/finder: ^5.4 || ^6.0 || ^7.0
- symfony/options-resolver: ^5.4 || ^6.0 || ^7.0
- symfony/validator: ^5.4 || ^6.0 || ^7.0
- symfony/var-exporter: ^5.4 || ^6.0 || ^7.0
- symfony/yaml: ^5.4 || ^6.0 || ^7.0
Requires (Dev)
- composer/composer: ^2.3
- ergebnis/composer-normalize: ^2.29
- kubawerlos/php-cs-fixer-custom-fixers: ^3.11
- mockery/mockery: ^1.5
- nikic/php-parser: ^4.15 || ^5.0
- php-parallel-lint/php-parallel-lint: ^1.3
- phpro/grumphp: ^1.13 || ^2.4
- phpunit/phpunit: ^9.5.22
- roave/security-advisories: dev-latest
- symfony/var-dumper: ^5.4 || ^6.0 || ^7.0
- symplify/coding-standard: ^12.0
- symplify/easy-coding-standard: ^12.0
This package is auto-updated.
Last update: 2024-09-02 11:22:40 UTC
README
为任何PHP包制作烘焙食谱。
简介
Cook是一个Composer插件,它以类似于Symfony Flex的方式执行包中嵌入的食谱。它可以与Flex一起使用,或者在任何PHP项目中使用,只要已安装Composer。
功能
- 向数组中添加新条目或导出新数组,过滤输出方式
- 向现有文件中添加内容或创建它们 (.env, Makefile 或其他)
- 将整个目录从您的存储库复制到项目中
- 默认情况下保留现有数据或使用CLI命令覆盖它
- 支持PHP数组、JSON、YAML、文本文件
- 输出安装后说明
- 仅处理根项目中所需的包
- 删除包时卸载食谱
- CLI命令用于安装或卸载食谱
安装
composer require williarin/cook
请确保允许插件运行。如果未自动添加,请在您的 composer.json
文件中添加此内容
"config": { "allow-plugins": { "williarin/cook": true } },
文档
创建食谱
查看williarin/cook-example以获取Cook食谱的示例。
要使您的包与Cook兼容,您只需在根目录中创建有效的 cook.yaml
或 cook.json
即可。
食谱架构必须遵循此结构
文件
文件描述为键值对。
- 键是目标文件的路径
- 值是数组或字符串
如果给出字符串,它必须是源文件的路径。
目录
目录描述为键值对。
- 键是目标目录的路径,该目录将接收文件
- 值是包含文件的包中的源目录的路径
安装后输出
您可能希望在安装后向用户显示一些文本。
您可以使用 Symfony Console 语法使用颜色。
合并
文本
文本合并器可以用于扩展任何基于文本的文件,例如
- .gitignore
- .env
- Makefile
作为默认合并器,您可以在食谱中使用 destination: source
格式。
示例1:合并或创建具有给定源文件的 .env
文件
给定 yourrepo/recipe/.env
并包含以下内容
SOME_ENV_VARIABLE='hello' ANOTHER_ENV_VARIABLE='world'
使用此食谱
files: .env: recipe/.env
创建的 .env
文件将如下所示
###> yourname/yourrepo ### SOME_ENV_VARIABLE='hello' ANOTHER_ENV_VARIABLE='world' ###< yourname/yourrepo ###
###> yourname/yourrepo ###
开头注释和 ###< yourname/yourrepo ###
结尾注释被Cook用于识别文件中的食谱。如果您熟悉Symfony Flex,则语法相同。
示例2:使用字符串输入合并或创建 .env
文件
或者,您可以使用 content
而不是 source
,以避免在您的存储库中创建文件。
files: .env: content: |- SOME_ENV_VARIABLE='hello' ANOTHER_ENV_VARIABLE='world'
PHP数组
PHP数组合并器会向现有数组中添加新条目或创建文件(如果不存在)。
示例 1: 无过滤器
此配方将在项目中创建或合并文件 config/bundles.php
。
files: config/bundles.php: type: php_array entries: Williarin\CookExample\CookExampleBundle: dev: true test: true
输出将如下所示
<?php return [ 'Williarin\CookExample\CookExampleBundle' => [ 'dev' => true, 'test' => true, ], ];
示例 2: 带过滤器
让我们为我们的条目添加一些过滤器。
files: config/bundles.php: # ... filters: keys: [class_constant] values: [single_line_array]
输出将如下所示
<?php return [ Williarin\CookExample\CookExampleBundle::class => ['dev' => true, 'test' => true], ];
JSON
JSON 合并器将新条目添加到现有的 JSON 文件中,或在需要时创建文件。
注意:只有顶级键会被合并。
示例
此配方将在项目的 composer.json
文件中添加一个脚本。
files: composer.json: type: json entries: scripts: post-create-project-cmd: php -r "copy('config/local-example.php', 'config/local.php');"
输出将如下所示
{ // ... existing config "scripts": { // ... other scripts "post-create-project-cmd": "php -r \"copy('config/local-example.php', 'config/local.php');\"" } }
YAML
YAML 合并器将新参数添加到现有文件中的顶级参数中,或在需要时创建文件。
尽管 YAML 文件像 JSON 或 PHP 数组一样表示数组,但此合并器的特殊性在于允许 YAML 注释。因此,您需要将合并内容描述为字符串或 YAML 文件,而不是使用限制为键值对的 entries
。
示例 1: 默认配置
给定这个现有的文件在 config/services.yaml
parameters: database_url: postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8 services: _defaults: autowire: true autoconfigure: true
使用此食谱
files: config/services.yaml: type: yaml content: | parameters: locale: fr services: Some\Service: ~
输出将如下所示
parameters: ###> williarin/cook-example ### locale: fr ###< williarin/cook-example ### database_url: postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8 services: ###> williarin/cook-example ### Some\Service: ~ ###< williarin/cook-example ### _defaults: autowire: true autoconfigure: true
示例 2: 带空行
为了让事情看起来更美观,让我们在我们的 services
合并下面添加一个空行
files: config/services.yaml: # ... blank_line_after: [services]
输出将如下所示
parameters: ###> williarin/cook-example ### locale: fr ###< williarin/cook-example ### database_url: postgresql://app:!ChangeMe!@127.0.0.1:5432/app?serverVersion=14&charset=utf8 services: ###> williarin/cook-example ### Some\Service: ~ ###< williarin/cook-example ### _defaults: autowire: true autoconfigure: true
注意:YAML 合并器只能预先添加现有内容,不能追加。
卸载 YAML 配方
当卸载配方时,如果设置了 uninstall_empty_sections
参数为 true
,则 YAML 合并器不会删除空部分。
files: config/routes.yaml: type: yaml source: | other_routes: resource: . type: other_routes_loader uninstall_empty_sections: true
在此示例中,如果 other_routes
部分为空,则在卸载配方时将删除它。
Docker Compose
Docker Compose 合并器类似于 YAML 合并器,但只有特定的部分会被合并。
只有 services
、volumes
、configs
、secrets
和 networks
顶级部分会被合并。
占位符
您可以在目标路径和源路径中使用多个占位符
%BIN_DIR%
:默认为bin
%CONFIG_DIR%
:默认为config
%SRC_DIR%
:默认为src
%VAR_DIR%
:默认为var
%PUBLIC_DIR%
:默认为public
%ROOT_DIR%
:默认为.
或,如果已定义,则为composer.json
中定义的extra.symfony.root-dir
您可以在您的 composer.json
文件中定义它们来覆盖任何这些占位符。
"extra": { "bin-dir": "bin", "config-dir": "config", "src-dir": "src", "var-dir": "var", "public-dir": "public" }
在 extra
中定义的任何其他变量都可以在您的配方中使用 %YOUR_VARIABLE%
。
"extra": { "your-variable": "..." }
CLI
您可能希望在安装后执行您的配方。Cook 提供此命令以执行所有可用的配方
composer cook
它不会覆盖已存在的配置。要覆盖一切,请运行
composer cook --overwrite
此外,您可以使用此命令卸载配方
composer cook:uninstall <package> [--all]
使用 <package>
进行单个包卸载或使用 --all
进行所有包。
许可证
版权所有 (c) 2023, William Arin