sbuerk / composer-files-provider
基于解析器模式提供基于堆栈的文件
Requires
- php: ^7.2 || ^7.3 || ^7.4 || ^8.0 || ^8.1
- composer-plugin-api: ^1.0.0 || ^2.0.0
- ext-json: *
Requires (Dev)
- composer/composer: 1.2.*@dev || 2.0.*@dev
- friendsofphp/php-cs-fixer: ^2.19.3
- overtrue/phplint: ^2.4.1
- phpstan/phpstan: ^1.8.4
- phpstan/phpstan-phpunit: ^1.1.1
- phpstan/phpstan-strict-rules: ^1.4.3
- phpunit/phpunit: ^8.5
README
Composer 文件提供者
此插件作为 composer 插件,以便以安装感知的方式提供文件。这意味着,它将根据安装占位符,按定义的顺序在配置的样板文件夹结构中搜索文件。要了解它是如何工作的,请参阅相应的部分。
此插件的行为可以通过根 composer.json
文件中的 extra
部分的配置来影响。有关可用选项,请参阅 options
部分。
使命
我们在几个项目中需要根据一些特定环境值以瀑布方式提供不同的文件。这意味着,将使用在定义的模式顺序中第一个匹配的文件(source
),并将其复制到定义的目标(target
)。
这始于特定环境的 .htaccess
文件,但它扩展到了其他配置文件的部分以调整配置。由于我们希望这些文件在相应的 Git 仓库中得以管理,因此开始使用一些bash脚本来实现这一点,并为不同的文件类型重复和调整,然后将其作为 composer 脚本添加。
由于维护这些bash脚本在多个仓库中相当痛苦,尤其是针对不同的版本,因此产生了需要基于项目配置的共享和维护性解决方案的需求。然而,考虑到这一点,道路上有许多障碍 - 创建带有bash脚本的包是容易的,但由于可配置的 bin
安装文件夹的性质,这并不容易确保。那么如何在项目级别提供简单的配置呢?
然后灵光一闪——为什么不用项目根目录的 composer.json 作为配置位置,而不是提供bash脚本,而是实现为一个干净的composer插件。这也使我们能够对其进行测试、检查并吸引更多人帮助或为此做出贡献。
到目前为止,这就是使命的故事以及这个包是如何诞生的。希望它能对您有所帮助。
替代方案
我们不知道其他开源扩展是否以类似的方式尝试实现相同的功能。我们可能没有正确搜索,或者太笨拙而找不到一个。如果存在类似的 composer 插件,请告诉我们。
支持版本
安装
只需将此包作为依赖项添加即可
$ composer require sbuerk/composer-files-provider
插件将直接开始工作。这意味着,如果您已经提供了所需的配置,它将直接进行处理。有关当前配置和可能匹配或未匹配的内容的更多信息,请参阅信息命令部分。
选项
示例配置
{ "extra": { "sbuerk/composer-files-provider": { "template-root": "files-provider/", "resolvers": { "custom": [ "%t%/%h%/%u%/%p%/%s", "%t%/%h%/%p%/%s", "%t%/%u%/%s", "%t%/%p%/%s", "%t%/default/%s" ] }, "files": [ { "label": "env based logo file", "source": "images/logo.png", "target": "images/logo.png", "resolver": "custom" }, { "label": ".htaccess", "source": "public/.htaccess", "target": "public/.htaccess" } ] } } }
配置:模板根目录
template-root
定义了文件查找的模板文件夹。占位符 %t%
将被替换为配置的 template-root
或默认值:file-templates
。
注意:路径将在右侧删除斜杠。因此,如果在路径模式中使用,您必须自己添加 /
作为目录分隔符。
示例
{ "extra": { "sbuerk/composer-files-provider": { "template-root": "custom-template-base-folder/", "resolvers": {}, "files": [] } } }
配置:解析器
您可以在 resolvers
下定义自定义解析器定义,格式如下:
{ "extra": { "sbuerk/composer-files-provider": { "resolvers": { "<resolver-name>": [ "<custom-pattern>", "<custom-pattern2" ] } } } }
您可以选择为文件配置使用哪个解析器。
⚠️ 如果您定义了一个“默认”解析器,将完全覆盖发货的默认解析器定义。:请务必小心!
默认解析器定义(如果没有覆盖)
{ "extra": { "sbuerk/composer-files-provider": { "resolvers": { "default": [ "%t%/%h%/%u%/%pp%/%p%/%s%", "%t%/%h%/%u%/%p%/%s%", "%t%/%h%/%u%/%s%", "%t%/%h%/%pp%/%p%/%s%", "%t%/%h%/%p%/%s%", "%t%/%h%/%s%", "%t%/%u%/%pp%/%p%/%s%", "%t%/%u%/%p%/%s%", "%t%/%u%/%s%", "%t%/%pp%/%p%/%s%", "%t%/%p%/%s%", "%t%/%ddev%/%s%", "%t%/default/%s%" ] } } } }
配置:文件
ℹ️ 解析器回退/默认使用意味着,它会使用发货的默认栈,除非默认解析器已被覆盖。
⚠️ 不要将包含敏感数据(凭据)的文件提交到您的仓库:请务必小心!因此,不要使用此方法从您的仓库外部提供这类文件。
信息命令
此包通过命令扩展了composer,以获取有关配置和可能发生的事情的一些见解
$ composer files-provider:info
它显示类似以下内容
可用占位符
标签化 & 发布
packagist.org 通过常规GitHub钩子启用。目前,没有计划创建GitHub发布版本。
# Add/Adjust CHANGELOG Entry (needed to create release commit) $ git commit -am "[RELEASE] 1.0.11 Add string environment variable placeholder for pattern" $ git tag 1.0.11 $ git push $ git push --tags
反馈 / 错误报告 / 贡献
欢迎在GitHub仓库中提交错误报告、功能请求和pull请求:https://github.com/sbuerk/composer-files-provider