brightnucleus / boilerplate
这是一个可以从零开始快速创建新软件包的样板包。
Requires
- brightnucleus/config: >=0.4
- brightnucleus/exceptions: >=0.2
- composer/composer: ^1.1
- mustache/mustache: ^2.10
- symfony/finder: ^3.1
README
这是一个可以从零开始快速创建新软件包的样板包。
目录
基本用法
要使用composer创建新软件包,请使用以下命令
composer create-project brightnucleus/boilerplate <package-folder>
这将创建一个名为 <package-folder>
的新文件夹,将 brightnucleus/boilerplate
包克隆到该文件夹中,并运行设置脚本。这些脚本将询问您有关您要创建的软件包的几个问题。
自定义生成的样板
如果您想为自己的目的使用此软件包,您可以将其分支出来,通过一些简单的调整来修改工作流程和模板,或者您可以通过Composer来扩展它。
提供自定义配置文件
您可以通过 composer.json
文件中的 "extra"
键来设置要加载的配置文件
"extra": { "brightnucleus-boilerplate": { "config-file": "_config/defaults.php", "config-prefix": "BrightNucleus/Boilerplate" } },
如果您想修改此处的键("brightnucleus-boilerplate"
),可以覆盖 Setup::getExtraKey()
方法。
protected static function getExtraKey() { return 'brightnucleus-boilerplate'; }
更改模板
模板位于 _templates
文件夹中,可以有一个可选的 .template
扩展名。该文件夹中的每个模板在运行Mustache渲染器后将被复制到根文件夹,该渲染器将所有占位符替换为在脚本执行期间提供的实际值。
如果 _templates
中有子文件夹,这些子文件夹及其内容也将被镜像到根文件夹中。因此,您可以在 _templates
文件夹中构建将来会出现在软件包根文件夹中的整个文件结构。
添加新模板只需在该结构中添加新文件即可。
更改占位符
占位符定义在 _config/defaults.php
文件中。
要添加新占位符,只需向 BrightNucleus/Boilerplate/Placeholders
引用的数组中添加新元素即可。
示例
$placeholders = [ // [...] // The placeholder tag that Mustache will look for. 'greeting' => [ // The name of the placeholder displayed when the user is asked for values. 'name' => 'Greeting', // The description of the placeholder displayed when the user is asked for values. 'description' => 'The greeting you want to send within your HelloWorld app.', // The validation callable that will either return the validate value or throw an exception. 'validation' => function ($placeholder) { return Validation::validateTrimmed($placeholder); }, // The default value to use if the user doesn't provide one. 'default' => 'Hello World', ], ];
此示例将添加一个新占位符 {{greeting}}
,您可以在模板中使用它。
传递给 'validation'
的验证值需要是一个可调用的函数,该函数获取用户输入的当前值,并需要返回该值的验证形式,或者如果该值不符合要求,则抛出异常。Validation
类提供了一些辅助方法来进行实际验证。
传递给 'default'
的默认值可以是用于的文本值,或者是一个可调用的函数,该函数获取占位符数组作为参数,并需要返回一个值来使用。使用此数组,您可以在另一个占位符已设置的情况下(配置文件的顺序),使一个默认值依赖于另一个占位符的当前值。
添加自定义设置任务
单独的任务是实现了 BrightNucleus\Boilerplate\Scripts\SetupTask
接口的简单类。
interface SetupTask { /** * Get the name of the current task. * * @since 0.1.0 * * @return string Name of the task. */ public function getName(); /** * Complete the setup task. * * @since 0.1.0 * * @return void */ public function complete(); }
虽然在大多数情况下,扩展 BrightNucleus\Boilerplate\Scripts\Task\AbstractTask
可能更可取,因为它提供了一些便利功能。
以下是一个在控制台显示“样板”logo的示例任务。
<?php namespace BrightNucleus\Boilerplate\Scripts\Task; /** * Class DisplayBoilerplateLogo. * * @since 0.1.0 * * @package BrightNucleus\Boilerplate\Scripts\Task * @author Alain Schlesser <alain.schlesser@gmail.com> */ class DisplayBoilerplateLogo extends AbstractTask { /** * Complete the setup task. * * @since 0.1.0 * * @return void */ public function complete() { $logo = <<<LOGO ____ _ _ _ _ | __ ) ___ (_) | ___ _ __ _ __ | | __ _| |_ ___ | _ \ / _ \| | |/ _ \ '__| '_ \| |/ _` | __/ _ \ | |_) | (_) | | | __/ | | |_) | | (_| | |_ __/ |____/ \___/|_|_|\___|_| | .__/|_|\__,_|\__\___| |_| LOGO; $this->io->write("<info>$logo</info>"); } }
现在,要将此任务连接到设置过程,您需要将类名插入到 BrightNucleus\Boilerplate\Scripts\Setup
类的 getSetupTasks()
方法中。
类数组按添加类的顺序执行,因此如果我们想将我们的新logo作为要采取的第一个步骤显示,我们将它插入到数组的顶部。
<?php namespace BrightNucleus\Boilerplate\Scripts; class Setup { // [...] protected static function getSetupTasks(Event $event) { return [ DisplayBoilerplateLogo::class, // <-- We've added our new task step here. AskAboutProjectParameters::class, VerifyProjectParameters::class, RemoveExistingRootFiles::class, ReplacePlaceholdersInTemplateFiles::class, MoveTemplateFilesToRootFolder::class, RemoveConfigFolder::class, RemoveTemplatesFolder::class, RemoveOriginalVCSData::class, InitializeVCS::class, ]; } }
如果我们现在运行我们的composer create-project
命令,Composer会首先下载所需的一切,然后通过显示新的标志来开始自定义设置过程。
贡献
欢迎所有反馈/错误报告/拉取请求。
许可
版权所有(c)2016 Alain Schlesser,Bright Nucleus
此代码受MIT许可证许可。