如何为新捆绑包编写 Symfony Flex 配方?
How write a Symfony Flex recipe for a new bundle?
我试图找到任何关于使用 Symfony Flex 的文档,但到目前为止没有成功。
几乎所有文档都指向安装使用 symfony Flex 的包,而不是如何创建使用它的包。
我什至尝试对某些软件包进行逆向工程,但还是失败了。
我的目标是在 config/packages/my_bundle.yaml
中为我的包生成默认配置文件。
我需要知道我需要把它放在哪里以及我有哪些环境变量(如果有的话)可用?
什么是 Flex 食谱?
请记住,flex 配方是来自您的包存储库的单独存储库,需要与 Bundle 包分开托管。
在最有可能的情况下,您是 public bundle/recipe,您必须将您的食谱提交给 "contrib" repository,获得批准并合并,以便可用作为社区食谱。
此外,重要的是要记住大多数用户默认情况下不会启用贡献存储库。因此,如果这对于安装此捆绑包很重要,您 应该在用户安装您的食谱 之前告诉他们如何操作(例如,在您的捆绑包的 自述文件 文件)。
私人食谱
另一种选择是使用私有 Flex 配方,如 here. The easiest way to generate a private recipe is to follow the same steps that Symfony does. Check this question and its answers for more details: How to generate a private recipe JSON from the contents of a recipe directory?
所述
除此之外:基本上,Flex 配方是一个带有 manifest.json
文件的存储库,其中包含用于启用某些“配置器”的特定键。
可用的 manifest.json
配置器是:
捆绑包
应在 bundles.php
上启用哪些捆绑包。这些在安装配方时添加,并在卸载配方时删除。
{
"bundles": {
"Symfony\Bundle\DebugBundle\DebugBundle": ["dev", "test"],
"Symfony\Bundle\MonologBundle\MonologBundle": ["all"]
}
}
配置
“配置”配置器处理两个键:copy-from-recipe
和 copy-from-package
。第一个可以从 recipe 存储库复制文件,第二个可以从 package 存储库复制文件。
{
"copy-from-package": {
"bin/check.php": "%BIN_DIR%/check.php"
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"src/": "%SRC_DIR%/"
}
}
在这个例子中,包中的文件bin/check.php
将被复制到项目%BIN_DIR%
,config
的内容而食谱包上的src
会复制到对应的目录下。
例如,这是提供默认配置文件的典型用例。根据您的要求,这就是您想要创建弹性配方的既定目的。
环境变量
此配置器只是将适当的环境变量值添加到项目的 .env
和 .env.dist
。 (同样,如果您卸载食谱,这些将被删除)
{
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1"
}
}
作曲家脚本
此配置器将项目 composer.json
中的任务添加到 scripts:auto-scripts
数组。 auto-scripts
是项目中每次执行composer update
或composer install
时执行的任务。
{
"composer-scripts": {
"vendor/bin/security-checker security:check": "php-script",
"make cache-warmup": "script",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
}
}
每行的第二部分指定命令的种类:常规PHP脚本(php-script
),shell 脚本(script
),或 Symfony 命令(symfony-cmd
,通过 bin/console
执行)。
Gitignore
这会将条目添加到项目的 .gitignore
文件中。
{
"gitignore": [
"/phpunit.xml"
]
}
manifest.json
的完整示例(从 here 中提取,与此 post 上的大多数其他示例一样):
{
"bundles": {
"Symfony\Bundle\FrameworkBundle\FrameworkBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"public/": "%PUBLIC_DIR%/",
"src/": "%SRC_DIR%/"
},
"composer-scripts": {
"make cache-warmup": "script",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
},
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1",
"APP_SECRET": "%generate(secret)%"
},
"gitignore": [
".env",
"/public/bundles/",
"/var/",
"/vendor/"
]
}
其他配置器
有两个不依赖于 manifest.json
文件的配置器:
Post-安装输出。
如果食谱包中存在名为 post-install.txt
的文件,安装完成后会显示其内容。您甚至可以使用样式 as defined here,以获得额外的 prettiness/obnoxiousness.
示例:
<bg=green;fg=white> </>
<bg=green;fg=white> Much success!! </>
<bg=green;fg=white> </>
* <fg=yellow>Next steps:</>
1. Foo
2. <comment>bar</>;
3. Baz <comment>https://example.com/</>.
这将在安装完成后呈现给用户。
生成文件
如果配方存储库中存在名为 Makefile
的文件,此处定义的任务将添加到项目的 Makefile(如果不存在则创建 Makefile)。
cache-clear:
@test -f bin/console && bin/console cache:clear --no-warmup || rm -rf var/cache/*
.PHONY: cache-clear
就这么简单。我想大多数包都不需要 makefile 命令,所以这比其他配置器的用处要少得多。
您可以阅读完整文档 here。
我试图找到任何关于使用 Symfony Flex 的文档,但到目前为止没有成功。
几乎所有文档都指向安装使用 symfony Flex 的包,而不是如何创建使用它的包。
我什至尝试对某些软件包进行逆向工程,但还是失败了。
我的目标是在 config/packages/my_bundle.yaml
中为我的包生成默认配置文件。
我需要知道我需要把它放在哪里以及我有哪些环境变量(如果有的话)可用?
什么是 Flex 食谱?
请记住,flex 配方是来自您的包存储库的单独存储库,需要与 Bundle 包分开托管。
在最有可能的情况下,您是 public bundle/recipe,您必须将您的食谱提交给 "contrib" repository,获得批准并合并,以便可用作为社区食谱。
此外,重要的是要记住大多数用户默认情况下不会启用贡献存储库。因此,如果这对于安装此捆绑包很重要,您 应该在用户安装您的食谱 之前告诉他们如何操作(例如,在您的捆绑包的 自述文件 文件)。
私人食谱
另一种选择是使用私有 Flex 配方,如 here. The easiest way to generate a private recipe is to follow the same steps that Symfony does. Check this question and its answers for more details: How to generate a private recipe JSON from the contents of a recipe directory?
所述除此之外:基本上,Flex 配方是一个带有 manifest.json
文件的存储库,其中包含用于启用某些“配置器”的特定键。
可用的 manifest.json
配置器是:
捆绑包
应在 bundles.php
上启用哪些捆绑包。这些在安装配方时添加,并在卸载配方时删除。
{
"bundles": {
"Symfony\Bundle\DebugBundle\DebugBundle": ["dev", "test"],
"Symfony\Bundle\MonologBundle\MonologBundle": ["all"]
}
}
配置
“配置”配置器处理两个键:copy-from-recipe
和 copy-from-package
。第一个可以从 recipe 存储库复制文件,第二个可以从 package 存储库复制文件。
{
"copy-from-package": {
"bin/check.php": "%BIN_DIR%/check.php"
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"src/": "%SRC_DIR%/"
}
}
在这个例子中,包中的文件bin/check.php
将被复制到项目%BIN_DIR%
,config
的内容而食谱包上的src
会复制到对应的目录下。
例如,这是提供默认配置文件的典型用例。根据您的要求,这就是您想要创建弹性配方的既定目的。
环境变量
此配置器只是将适当的环境变量值添加到项目的 .env
和 .env.dist
。 (同样,如果您卸载食谱,这些将被删除)
{
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1"
}
}
作曲家脚本
此配置器将项目 composer.json
中的任务添加到 scripts:auto-scripts
数组。 auto-scripts
是项目中每次执行composer update
或composer install
时执行的任务。
{
"composer-scripts": {
"vendor/bin/security-checker security:check": "php-script",
"make cache-warmup": "script",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
}
}
每行的第二部分指定命令的种类:常规PHP脚本(php-script
),shell 脚本(script
),或 Symfony 命令(symfony-cmd
,通过 bin/console
执行)。
Gitignore
这会将条目添加到项目的 .gitignore
文件中。
{
"gitignore": [
"/phpunit.xml"
]
}
manifest.json
的完整示例(从 here 中提取,与此 post 上的大多数其他示例一样):
{
"bundles": {
"Symfony\Bundle\FrameworkBundle\FrameworkBundle": ["all"]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%/",
"public/": "%PUBLIC_DIR%/",
"src/": "%SRC_DIR%/"
},
"composer-scripts": {
"make cache-warmup": "script",
"assets:install --symlink --relative %PUBLIC_DIR%": "symfony-cmd"
},
"env": {
"APP_ENV": "dev",
"APP_DEBUG": "1",
"APP_SECRET": "%generate(secret)%"
},
"gitignore": [
".env",
"/public/bundles/",
"/var/",
"/vendor/"
]
}
其他配置器
有两个不依赖于 manifest.json
文件的配置器:
Post-安装输出。
如果食谱包中存在名为 post-install.txt
的文件,安装完成后会显示其内容。您甚至可以使用样式 as defined here,以获得额外的 prettiness/obnoxiousness.
示例:
<bg=green;fg=white> </>
<bg=green;fg=white> Much success!! </>
<bg=green;fg=white> </>
* <fg=yellow>Next steps:</>
1. Foo
2. <comment>bar</>;
3. Baz <comment>https://example.com/</>.
这将在安装完成后呈现给用户。
生成文件
如果配方存储库中存在名为 Makefile
的文件,此处定义的任务将添加到项目的 Makefile(如果不存在则创建 Makefile)。
cache-clear:
@test -f bin/console && bin/console cache:clear --no-warmup || rm -rf var/cache/*
.PHONY: cache-clear
就这么简单。我想大多数包都不需要 makefile 命令,所以这比其他配置器的用处要少得多。
您可以阅读完整文档 here。