#shell #template #script #handlebars #system #context #inline

nightly bin+lib handlematters

带有 Handlebars 和内联 shell 脚本的独立模板系统

1 个不稳定版本

0.2.1 2024 年 7 月 31 日

模板引擎 中排名 185

Download history 114/week @ 2024-07-28 3/week @ 2024-08-04

每月下载量 117

MIT 许可证 MIT

14KB
325 行代码(不包括注释)

Handlematters

带有 Handlebars 和内联 shell 脚本的独立模板系统

简介

Handlematters 是一个结合 Handlebars 和 shell 脚本的模板系统。它旨在替代 envsubst 等简单替换任务。

以下是一个 Handlematters 模板的示例

hello.hms

Any text before the context or template block is just a comment.
It will not be output.

--- context ---
greeting: echo hello

list: |
  for v in foo bar baz; do
    echo "* $v"
  done

--- template ---
{{greeting}}, world

{{list}}

将此文件传递给 handlematters 将生成以下输出

$ handlematters hello.hms
hello, world

* foo
* bar
* baz

让我们仔细看看。

--- context ---
greeting: echo hello

list: |
  for v in foo bar baz; do
    echo "* $v"
  done

context 块是一个 YAML 文档。每个属性的值将作为 shell 脚本执行,输出将是结果值。

--- template ---
{{greeting}}, world

{{list}}

template 块是一个 Handlebars 模板。使用 {{...}} 输出上下文值。如果您不熟悉 Handlebars 语法,请参阅 https://handlebars.node.org.cn/

让我们看看一个更实际的例子

Note: The expression in triplet braces {{{...}}} will be output without HTML escaping.

--- context ---
name: cargo metadata --format-version=1 --no-deps | jq -r .packages[0].name
author: cargo metadata --format-version=1 --no-deps | jq -r .packages[0].authors[0]

--- template ---
{{{name}}} by {{{author}}}

将生成

handlematters by Keita Urashima <ursm@ursm.jp>

当然,这个 README 也是由 Handlematters 生成的。查看:https://github.com/ursm/handlematters/blob/main/README.md.hms

使用方法

Self-contained template system with Handlebars and inline shell scripts

Usage: handlematters [FILE]

Arguments:
  [FILE]  Input file [default: stdin]

Options:
  -h, --help     Print help
  -V, --version  Print version

依赖关系

~6.5MB
~133K SLoC