模板

默认变量

  • date:默认为当天日期,使用世界标准时间,按照 ISO 8601 格式打印(例如,"2014-03-11")。
  • datetime:默认为当天日期和时间,使用世界标准时间,按照 ISO 8601 格式打印(例如,"2014-03-11T16:06:02+00:00")。
  • author_name:默认为 "Anonymous"
  • author_email:默认为 "[email protected]"
  • apps_dir:在发布项目中创建 OTP 应用的目录。默认为 "apps/"
  • copyright_year:默认为当前年份,使用世界标准时间。

全局变量

可以通过编辑 $HOME/.config/rebar3/templates/globals 文件来设置全局变量。

{variables, [
   {author_name, "My Name Is A String"},
   {copyright_year, "2014-2022", "The year or range of years for copyright"},
   {my_custom_var, "hello there"}
]}.

这将允许您为所有模板定义变量。未定义的变量将被忽略并恢复为默认值。

这些变量的覆盖顺序为:默认值 < $HOME/.config/rebar3/templates/globals < 命令行调用

内置模板

Rebar3 附带了一些已安装的模板,可以通过调用 rebar3 new 来列出。

$ ./rebar3 new
app (built-in): Complete OTP Application structure.
cmake (built-in): Standalone Makefile for building C/C++ in c_src
escript (built-in): Complete escriptized application structure
lib (built-in): Complete OTP Library application (no processes) structure
plugin (built-in): Rebar3 plugin project structure
release (built-in): OTP Release structure for executable programs

任何自定义插件都将以 <plugin_name> (custom): <description> 的格式显示。

可以通过调用 rebar3 new help <plugin> 获取每个插件的详细信息。

$ ./rebar3 new help plugin
plugin:
        built-in template
        Description: Rebar3 plugin
        Variables:
                name="myplugin" (Name of the plugin)
                desc="A rebar plugin" (Short description of the plugin's purpose)
                date="2014-11-10"
                datetime="2014-11-10T18:29:41+00:00"
                author_name="Anonymous"
                author_email="[email protected]"
                copyright_year="2014"
                apps_dir="apps/" (Directory where applications will be created if needed)

所有变量都显示了它们的默认值,以及可选的说明(括号内)。这些变量也可以全局覆盖

可以通过调用以下命令运行模板:

$ ./rebar3 new plugin name=demo author_name="Fred H."
...
$ ./rebar3 new plugin demo author_name="Fred H."
...

然后转到 rebar3 为项目创建的目录。

自定义模板

自定义模板可以添加到 $HOME/.config/rebar3/templates/ 中。每个模板至少包含两个文件:

  • my_template.erl:可以有多个这样的文件。它们是使用 mustache 模板语法进行变量替换的常规 Erlang 文件(由soranoba 的实现提供)。
  • my_template.template:称为模板索引,每个模板都有一个,可从 rebar3 调用。调用 rebar3 new my_template 时,此文件将可见。此文件将不同的 mustache 模板文件组合成一个更具凝聚力的模板。

文件语法

模板索引

以下选项可用:

{description, "This template does a thing"}.
{variables, [
    {var1, "default value"},
    {var2, "default", "explain what this does in help files"},
    {app_dir, ".", "The directory where the application goes"}
  ]}.
{dir, "{{appdir}}/src"}.
{file, "mytemplate_README", "README"}.
{chmod, "README", 8#644}.
{template, "myapp/myapp.app.src", "{{appdir}}/src/{{name}}.app.src"}.

具体来说:

  • description:接受一个字符串,解释模板的用途。
  • variables:接受两种形式的变量列表:
    • {名称, 默认字符串, 帮助字符串};
    • {名称, 默认字符串}.
  • {dir, 可模板化的路径字符串}:创建给定的目录。变量名称可用于路径名。
  • {file, 文件路径, 目标文件路径}:将文件逐字复制到其目标位置。
  • {template, 文件路径, 可模板化的路径字符串}:评估给定的模板。FilePath 相对于模板索引。
  • {chmod, 文件路径, 整数}:更改文件的权限,使用指定的整数值。八进制值可以通过 8#640 输入。

示例

例如,我们将为通用测试测试套件创建一个模板。创建目录结构 ~/.config/rebar3/templates/,然后进入该目录。

我们将从模板索引开始,名为 ct_suite.template

{description, "A basic Common Test suite for an OTP application"}.
{variables, [
    {name, "suite", "Name of the suite, prepended to the standard _SUITE suffix"}
]}.

{dir, "test"}.
{template, "ct_suite.erl", "test/{{name}}_SUITE.erl"}.

这告诉 Rebar3 创建测试目录并评估 mustache 模板。所有路径都相对于当前工作目录。

让我们创建模板文件:

-module({{name}}_SUITE).

-include_lib("common_test/include/ct.hrl").
-include_lib("eunit/include/eunit.hrl"). % Eunit macros for convenience

-export([all/0
        ,groups/0
       %,init_per_suite/1, end_per_suite/1
       %,init_per_group/2, end_per_group/2
        ,init_per_testcase/2, end_per_testcase/2
        ]).

-export([fail/1]).

all() -> [fail].

groups() -> [].

init_per_testcase(_Name, Config) -> Config.

end_per_testcase(_Name, _Config) -> ok.

fail(_Config) ->
    ?assert(false).

此文件对名称进行非常简单的变量替换(使用 {{name}}),这就是它需要做的全部。

让我们转到您拥有的任何现有项目并尝试一下:

$ ./rebar3 new
app (built-in): OTP Application
ct_suite (custom): A basic Common Test suite for an OTP application
lib (built-in): OTP Library application (no processes)
release (built-in): OTP Release structure for executable programs
plugin (built-in): Rebar3 plugin

第一行显示我们的 ct_suite 模板已被检测到并且可用。

让我们看看详细信息:

$ ./rebar3 new help ct_suite
ct_suite:
        custom template (/home/ferd/.config/rebar3/templates/ct_suite.template)
        Description: A basic Common Test suite for an OTP application
        Variables:
                name="suite" (Name of the suite, prepended to the standard _SUITE suffix)
                date="2014-11-10"
                datetime="2014-11-10T18:46:33+00:00"
                author_name="Anonymous"
                author_email="[email protected]"
                copyright_year="2014"
                apps_dir="apps/" (Directory where applications will be created if needed)

变量和描述的文档已到位。要应用模板,请转到 OTP 应用的任何顶级目录:

$ ./rebar3 new ct_suite demo
===> Writing test/demo_SUITE.erl

您将看到代码已到位。

插件模板

插件可以自带自己的模板,然后与其他模板一起列出。结构与 ~/.config/rebar3/templates/ 中的结构完全相同,只是必须将其放在插件的 priv/ 目录中。

上次修改时间:2021年5月6日:审查整个文档并在必要时进行改进 (439f15f)