mcpField
K
knap

knap

github.com/kepano文档处理50.3k5.7k 次安装6 周前更新
代码仓库

关于 knap

Knap 是一个命令行工具,可使用 JSON 或 CSV 数据、变量、过滤器和逻辑渲染 Markdown 模板。它还支持模板校验和批量输出,包括使用网页提取数据生成文件。

主要功能

  1. 01使用变量和过滤器渲染模板
  2. 02使用条件与循环逻辑
  3. 03校验模板语法和过滤器
  4. 04从 CSV、JSON 或文件夹批量渲染
  5. 05根据模板数据设置输出文件名
  6. 06将 Defuddle JSON 通过管道传入渲染

适用场景

  1. 01根据结构化数据生成 Markdown 笔记
  2. 02根据 CSV 行批量创建笔记
  3. 03渲染前检查模板
  4. 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 等。

评论

支持 Markdown