关于 knap
Knap 是一个命令行工具,可使用 JSON 或 CSV 数据、变量、过滤器和逻辑渲染 Markdown 模板。它还支持模板校验和批量输出,包括使用网页提取数据生成文件。
主要功能
- 01使用变量和过滤器渲染模板
- 02使用条件与循环逻辑
- 03校验模板语法和过滤器
- 04从 CSV、JSON 或文件夹批量渲染
- 05根据模板数据设置输出文件名
- 06将 Defuddle JSON 通过管道传入渲染
适用场景
- 01根据结构化数据生成 Markdown 笔记
- 02根据 CSV 行批量创建笔记
- 03渲染前检查模板
- 04将提取的网页转换为模板化笔记
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ kepano/ obsidian-skills --skill knap安装后在 Claude Code 中输入/knap确认已加载。
详细介绍
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 或 stdin)和一个数据来源(--data 或 --data-json)。只有一个输入可以读取 stdin。没有模板文件或 -t 时,Knap 从 stdin 读取模板。
输出默认写入 stdout。-o 会在渲染成功后创建父目录并覆盖目标。出错时以状态码 1 退出;诊断信息写入 stderr。警告可能伴随成功的输出。
模板
使用 {{ variable }} 表示值,| 表示过滤器,{% ... %} 表示逻辑。例如,将以下内容保存为 template.md:
---
{{ title | yaml_property:"title" }}
{{ tags | yaml_property:"tags" }}
---
# {{ title | trim }}
{% if author %}
By {{ author }}
{% endif %}
{{ content }}
使用 yaml_property 处理完整的 frontmatter 属性,以便值被正确加引号和缩进。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,或对包含 JSON 对象的文件夹使用 --data ./articles。CSV 表头会成为变量名,值保持为字符串。管道传入的数据默认为 JSON;对于管道传入的 CSV,请添加 --format csv。
使用 --dry-run 验证并列出输出路径而不写入文件。已存在的文件需要 --overwrite,包括在 dry run 期间。批量中重复的输出名称即使使用 --overwrite 也会报错。
文件名模板必须生成带扩展名的单个文件名,且不能包含目录。对由数据生成的名字使用 safe_name。没有 --filename 时,Knap 保留源 JSON 的基本文件名,或将 CSV 行和数组项编号为 1.md、2.md 等。