Knap 是命令行 Markdown 模板渲染工具,用模板配合 JSON/CSV 等结构化数据生成 Markdown 文本。安装方式:npm install -g knap(需 Node.js 20 或更高),也可用 npx knap;运行 knap --help 查看命令和选项。
主要能力:模板语法用 {{ variable }} 取值、| 应用过滤器、{% ... %} 编写逻辑;内置标准过滤器,可用例如 yaml_property 生成正确引号与缩进的 frontmatter。数据必须是 JSON 对象,其属性成为模板变量;--set 可用字符串覆盖顶层键,嵌套对象、数组、数字和布尔值需用 JSON。
常见用法:knap render template.md --data article.json -o note.md 渲染模板;可用 knap render -t '# {{ title | trim }}' --data-json '{"title":"Hello"}' 内联模板与数据;knap validate template.md 在渲染前检查语法、过滤器名称和静态过滤器参数(不检查变量是否存在或运行时值);knap batch template.md --data articles.csv --output-dir notes --filename '{{ title | safe_name }}.md' 按 CSV 每行或 JSON 数组项生成一个文件,支持 --dry-run 预览、--overwrite 覆盖已有文件。还可配合 Defuddle 提取网页为 JSON 再渲染成笔记:defuddle parse https://example.com/article --md --json | knap render template.md --data - -o note.md。
语言参考可用离线命令查看,如 knap help syntax、knap help filters、knap help filter date、knap help tags、knap help tag for。
限制:模板来源(文件、-t 或 stdin)与数据来源(--data 或 --data-json)各只能选一个,且只能有一个输入读取 stdin;输出默认到 stdout,-o 会创建父目录并在渲染成功后覆盖目标;出错以状态码 1 退出,诊断信息写入 stderr;不提供 Web Clipper 浏览器变量、选择器、提示词或依赖 DOM 的 HTML 过滤器;批量输出文件名必须为单个带扩展名的文件名且不含目录,批内重名即使 --overwrite 也报错。