执行包中嵌入的食谱的Composer插件

维护者

详细信息

github.com/williarin/cook

源代码

问题

安装: 707

依赖项: 1

建议者: 0

安全: 0

星星: 24

关注者: 2

分支: 6

开放问题: 0

类型:composer-plugin

1.3.0 2024-05-02 10:39 UTC

This package is auto-updated.

Last update: 2024-09-02 11:22:40 UTC


README

为任何PHP包制作烘焙食谱。

Github Workflow

简介

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.yamlcook.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 合并器,但只有特定的部分会被合并。

只有 servicesvolumesconfigssecretsnetworks 顶级部分会被合并。

占位符

您可以在目标路径和源路径中使用多个占位符

  • %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 进行所有包。

许可证

MIT

版权所有 (c) 2023, William Arin