amcgowanca / composer-hydration
提供Composer脚本,通过占位符替换实现项目骨架的活化。
Requires
README
composer-hydration
简介
composer-hydration是一个简单的包,提供用于作为占位符替换的Composer脚本,主要用于“骨架”项目。
示例
composer run-script hydrate -- --replace={FRUIT}:"apple",{INGREDIENT}:"cinnamon"
脚本将在文件内容
、文件名
和文件夹
中搜索占位符。
之前
$ /path/composer/project/{FRUIT}.txt
"I love {FRUIT} with {INGREDIENT}, is a good combination!"
之后
$ /path/composer/project/apple.txt
"I love apple with cinnamon, is a good combination!"
安装
安装Composer
由于composer-hydration是一个Composer脚本,您首先需要安装composer。
注意:以下说明适用于全局composer安装。您可能需要根据您的设置将
composer
替换为php composer.phar
(或类似)。
添加包依赖
将composer-hydration添加为您的项目的包依赖,更新您的composer.json
"require": {
...
"jkribeiro/composer-hydration": "~1"
}
定义Composer脚本
定义Composer脚本,将以下条目添加到您的composer.json
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones"
}
安装项目
composer install
使用方法
您可以以多种方式执行此脚本
手动执行命令
在安装了包之后,您可以手动运行命令以将您的值放置其中。
composer run-script hydrate -- --replace={SEARCH}:{REPLACE},..."
在Composer事件期间进行活化
Composer在其执行过程中触发一些事件,这有助于确定在哪个步骤/事件上执行活化过程。
以下示例中,活化过程将在项目安装之后发生
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones",
"post-install-cmd": "@composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:{%BASENAME%}"
}
变量作为替换值
有时我们需要在composer.json
中使用动态替换值,而不仅仅是硬编码的值,如{FRUIT}:banana
,对于这些情况,有两种可能性
环境变量
composer.json
允许使用环境变量作为替换占位符值,如{{PROJECT_NAMESPACE}}:$PROJECT_NAME"
,其中$PROJECT_NAME
是变量名。您必须在执行Composer命令之前定义这些变量。
示例
composer.json
...
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones",
"post-install-cmd": "@composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:$PROJECT_NAME"
}
执行
$ export PROJECT_NAME="My Project"
$ composer install
“魔法常量”
使用与PHP魔法常量相同的思想,composer-hydration也提供了一些魔法常量。
-
{%BASENAME%}
:返回脚本执行的基文件夹名称,通常是项目名称。 -
{%UCFIRST_BASENAME%}
:返回首字母大写的基文件夹名称。 -
{%UPPER_CAMEL_CASE_BASENAME%}
,{%LOWER_CAMEL_CASE_BASENAME%}
:使用大/小驼峰格式返回基文件夹名称。仅允许文件夹分隔符 '-' 和 '_'。示例
$ ~/Projects/myproject: composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:{%BASENAME%}"
带有
{{PROJECT_NAMESPACE}}
的占位符将被替换为myproject
。