brightnucleus/boilerplate

这是一个可以从零开始快速创建新软件包的样板包。

v0.1.7 2017-10-28 17:51 UTC

This package is auto-updated.

Last update: 2024-08-29 03:36:13 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

这是一个可以从零开始快速创建新软件包的样板包。

目录

基本用法

要使用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许可证许可。