knap 是做什么的?
使用 Knap CLI 渲染带有变量、过滤器和逻辑的 Markdown 模板。
如果未安装:npm install -g knap(需要 Node.js 20 或更高版本)。或者使用 npx knap。
运行 knap --help 查看可用命令和选项。通过 CLI 的离线参考了解该语言:
knap help syntax
knap help filters
knap help filter date
knap help tags
knap help tag for
使用列表查找名称,然后请求单个帮助以获取语法、参数和示例及预期输出。
用法
使用 JSON 变量渲染模板:
knap render template.md --data article.json -o note.md
内联提供模板和数据:
knap render -t '# {{ title | trim }}' --data-json '{"title":"Hello"}'
覆盖变量或通过管道传递 JSON 数据:
knap render template.md --data article.json --set 'title=Custom title'
cat article.json | knap render template.md --data -
数据必须是 JSON 对象;其属性成为模板变量。--set 用字符串覆盖字面顶层键。使用 JSON 表示嵌套对象、数组、数字和布尔值。
选择一个模板源(文件、-t 或标准输入)和一个数据源(--data 或 --data-json)。只有一个输入可以读取标准输入。如果没有模板文件或 -t,Knap 会从标准输入读取模板。
输出默认到标准输出。-o 会在渲染成功后在目标位置创建父目录并覆盖文件。错误以状态 1 退出;诊断信息输出到 stderr。警告可能伴随成功输出。
模板
使用 {{ variable }} 表示值,| 表示过滤器,{% ... %} 表示逻辑。例如,将其保存为 template.md:
---
{{ title | yaml_property:"title" }}
{{ tags | yaml_property:"tags" }}
---
# {{ title | trim }}
{% if author %}
作者:{{ author }}
{% endif %}
{{ content }}
使用 yaml_property 获取完整的前言属性,以便正确引用和缩进值。CLI 包含标准过滤器,但不提供 Web Clipper 浏览器变量、选择器、提示或依赖 DOM 的 HTML 过滤器。通过 JSON 提供变量。
在渲染前检查模板:
knap validate template.md
验证检查语法、过滤器名称和静态过滤器参数,不涉及数据或文件输出。它不检查变量存在性、运行时值或动态参数;使用真实数据渲染以检查运行时行为。诊断信息输出到 stderr,并包含相关的帮助命令。
Defuddle 管道
将网页提取为包含 Markdown 内容的 JSON,然后渲染成笔记:
defuddle parse https://example.com/article --md --json \
| knap render template.md --data - -o note.md
Defuddle 的 JSON 属性(例如 title 和 content)直接成为模板变量。
批量渲染
为 CSV 行、JSON 数组对象或文件夹中的每个 JSON 文件创建一个文件:
knap batch template.md --data articles.csv --output-dir notes \
--filename '{{ title | safe_name }}.md'
使用 --data articles.json 处理数组,或使用 --data ./articles 处理包含 JSON 对象的文件夹。CSV 表头成为变量名,值保持为字符串。通过管道传递的数据默认为 JSON;对于通过管道传递的 CSV,添加 --format csv。
使用 --dry-run 验证并列出输出路径而不写入文件。现有文件需要 --overwrite,包括在进行空运行期间。批量中的重复输出名称即使使用 --overwrite 也会导致错误。
文件名模板必须生成一个包含扩展名的单一文件名,不包含目录。对于源自数据的名称,使用 safe_name。如果没有 --filename,Knap 会保留源 JSON 的基本名称,或将 CSV 行和数组项编号为 1.md、2.md 等。