在我的私人 Symfony Flex 配方中,安装包时不会从配方中复制文件

On my private Symfony Flex recipe, files are not copied from the recipe when installing the bundle

我目前正在为极少数人发布一个 Symfony 包。这就是为什么我不认为有一天会出现在 https://github.com/symfony/recipes-contrib, so I used the Flex Private Recipe 文档上的原因。

pushed the bundle on GitHub and created another one to store its recipe.

这是我的食谱:

{
  "manifests": {
    "edumedia/gar-api-bundle": {
      "manifest": {
        "bundles": {
          "eduMedia\GarApiBundle\eduMediaGarApiBundle": [
            "all"
          ]
        },
        "copy-from-recipe": {
          "config/": "%CONFIG_DIR%"
        },
        "env": {
          "GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
          "GAR_SSL_CERT": "/path/to/cert.pem",
          "GAR_SSL_KEY": "/path/to/cert.key"
        }
      },
      "ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
    }
  }
}

在同一层,有一个config目录,里面有一个配置文件:

# config/edumedia_gar_api.yaml
edumedia_gar_api:
  distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'
  ssl_cert: '%env(GAR_SSL_CERT)%'
  ssl_key: '%env(GAR_SSL_KEY)%'
  remote_env: 'preprod'
  cache_directory: '%kernel.cache_dir%/gar-cache'

但是,执行配方时没有复制任何内容。

在私人食谱上,文件不是从目录中复制的,而是从“食谱”本身复制的。

目录结构在将 Flex 配方提交到 Symfony 存储库时有效,但在创建私有配方时,文件内容需要 内联 在配方的 JSON.

例如:

{
  "manifests": {
    "edumedia/gar-api-bundle": {
      "manifest": {
        "bundles": {
          "eduMedia\GarApiBundle\eduMediaGarApiBundle": [
            "all"
          ]
        },
        "copy-from-recipe": {
          "config/": "%CONFIG_DIR%"
        },
        "env": {
          "GAR_DISTRIBUTOR_ID": "000000000_0000000000000000",
          "GAR_SSL_CERT": "/path/to/cert.pem",
          "GAR_SSL_KEY": "/path/to/cert.key"
        }
      },
      "files": {
                "config/packages/edumedia_gar_api.yaml": {
                    "contents": [
                        "edumedia_gar_api:",
                        "  distributor_id: '%env(GAR_DISTRIBUTOR_ID)%'",
                        "  ssl_cert: '%env(GAR_SSL_CERT)%'",
                        "  ssl_key: '%env(GAR_SSL_KEY)%'",
                        "  cache_directory: '%kernel.cache_dir%/gar-cache'",
                        "  remote_env: 'preprod'"
                    ],
                    "executable": false
                }
            },
      "ref": "ad610a54abdf2f5563841a4ce4b3c3cb29a7d0ff"
    }
  }
}

手动创建此文件可能会很麻烦。所以通常更好的做法是创建一个 public 配方,具有完整的目录结构(包括供应商、包名和版本号的目录),并使用 Symfony 的工具生成完成食谱。

我在 this other answer 上描述了这个过程。