开发框架
beamai_render · Erlang 的模板与 Markdown 渲染引擎
模板在构建期由 rebar3 插件编译成 .erl 文件,运行期的渲染就是一次普通函数调用:没有进程,没有 ETS 表,不查任何表。静态模板文本进入模块的 literal pool,跨进程按引用共享。
Markdown 在运行期渲染,纪律相同:pipeline 是普通 map,什么都不缓存。库和测试套件都只依赖 OTP。
模板编译成模块,渲染就是函数调用
%% rebar.config:两套模板引擎并列使用
{provider_hooks, [{pre, [{compile, mustache}, {compile, jinja}]}]}.
{mustache_opts, [{views, "views"}, {prefix, "view_"}]}.
{jinja_opts, [{views, "views"}, {suffix, ".j2"}, {prefix, "j2_"}]}.
%% Markdown
beamai_markdown:to_html(~"Hello *world*!").
%% => <<"<p>Hello <em>world</em>!</p>\n">>
P = beamai_markdown:pipeline([pipe_tables, task_lists, footnotes]),
beamai_markdown:to_html(Text, P).功能
能做什么
Mustache
通过 mustache 官方 spec 六个必选模块的全部 136 个用例;.mustache 文件编译成 view_ 前缀的模块。
Jinja2
支持 include、extends、macro、import 与 |safe;一致性基线是由 CPython jinja2 3.1 生成的 520 条 fixture。与 Mustache 共用一个 views 目录。
Markdown
经 cl-markding 从 markdig 移植:通过 CommonMark 0.31.2 全部 652 个用例与 649 例逐字节 roundtrip;30 个扩展(管道表与网格表、任务列表、脚注、数学公式、emoji、SmartyPants、alert……)。
四种输出
HTML、纯文本、规范化 Markdown 与原样 roundtrip 四个渲染器。
编译期折叠
beamai_markdown_transform 在编译期把字面量的 Markdown 调用或 -markdown_document 文件直接折叠成 HTML,运行期零开销。
零依赖
库与测试套件都只依赖 OTP;生成的每个文件都标明出自哪个引擎,每个 provider 只回收自己的孤儿文件。
规格
技术规格
| 运行环境 | Erlang/OTP,rebar3 插件(rebar3 mustache / rebar3 jinja) |
|---|---|
| 当前版本 | 0.6.0 |
| 依赖 | 只依赖 OTP |
| 许可 | Apache License 2.0 |
常见问题
你可能想问
Mustache 和 Jinja2 选哪个?
两者是并列关系,同一个项目可以都用。Mustache 简单、无逻辑;Jinja2 有词法作用域、继承、宏与过滤器,适合复杂页面。注意两者在真假判断、转义写法上的差异,README 里有对照表。
运行期有什么开销?
模板在构建期编译成 Erlang 模块,渲染是一次普通函数调用,不起进程、不用 ETS;静态文本在 literal pool 里跨进程共享。
许可协议是什么?
Apache License 2.0,可用于商业项目。