Notist CLI
notist 是发布与检查的统一入口。build / serve 构建或预览当前 package 的 site;check / cst / core / json / query / html 分析单个源码或渲染单页;lsp 提供 stdio 语言服务。
字段见 Notist.toml 配置,包组织见 Package 与站点组织。从源码运行时使用 cargo run -p notist-cli -- <command>。
命令总览
命令 | 作用 | 选择方式 | 主要输出 |
|---|---|---|---|
| 构建当前包或 workspace 站点 | 当前包、-p、--workspace | 文件树与 stdout 摘要 |
| 预览一个包的站点 | 当前包或 -p | HTTP 服务与终端 / 浏览器诊断 |
| 解析并报告文档或模块的诊断 | 单文件或目录 | stderr 诊断 |
| 打印无损 CST | 单文件 | stdout 树 |
| 打印降糖后的 core / IR | 单文件 | stdout 树 |
| 打印 JSON analysis | 单文件 | stdout JSON |
| 按 id / tag / ctor / function / level 选择节点 | 单文件 | stdout JSON |
| 渲染单页 HTML 及使用的组件资源 | 单文件 | 目录与 stdout 路径 |
| 通过 stdio 运行语言服务 | 编辑器 | JSON-RPC |
notist help <command> 或 notist <command> --help 显示当前二进制的完整参数。
全局选项
选项 | 说明 |
|---|---|
| 显式指定 Notist.toml,跳过最近清单的自动发现;路径相对当前工作目录。成员清单仍使用所属 workspace 的共享输出根。单文件命令用它提供文档扩展。 |
| 让 |
| 在 stderr 展示树状实时构建进度与各阶段耗时,包括配置、文档分析、模块加载、求值、HTML、资源和发布;可放在子命令前后。重定向、CI 或 dumb 终端使用无动画的纯文本。 |
| build / serve 的统一工作线程数上限,N 为正整数;默认使用可用 CPU 数。可放在子命令前后。单文件命令和语言服务不使用构建执行器。 |
| 打印帮助。 |
| 打印版本。 |
配置发现
build / serve 从当前目录向上寻找最近的 Notist.toml,并识别所属的祖先 workspace;成员不继承 workspace 的扩展或站点选项。单文件命令只使用最近的包配置。
路径与配置作用域见 Notist.toml 配置。
workspace 内使用 -p / --package 按包名选择成员。--config 的作用类似 Cargo 的 --manifest-path,用于显式定位清单,例如从 workspace 外调用;指定成员清单不改变共享输出根。从源码运行时,cargo run -p notist-cli -- build -p notist-site 中,-- 前的 -p 选择 Rust crate,之后的 -p 选择 Notist 包。
发布:notist build
选项 | 说明 |
|---|---|
| 构建当前 workspace 中所有声明 site 的包;没有 site 的模块包跳过。 |
| 按包名选择成员,可重复;与 --workspace 互斥。显式选择的包必须声明 site。 |
| 覆盖该包站点的输出目录,相对当前工作目录。 |
普通包必须声明 site 才能直接 build / serve。纯 workspace 根默认构建所有站点;有 package 的根默认只构建根包,--workspace 构建全部成员。serve 需要包的 site;在纯 workspace 根通过 -p 指定成员。
一次调用共用一个构建执行器:文档求值和最终页面模板渲染使用相同的工作线程池,不为每个阶段或 workspace 成员分别创建线程池。-j 1 保持串行求值与串行模板渲染;小批次可以串行处理,不必用满线程。分析、链接与正文 HTML 渲染、资源准备及发布仍按阶段执行,不因指定 -j 就全部并行。
并行构建保持页面输出和诊断的归并顺序,但跨页资源请求交错时,共享预算耗尽的具体报错页面可能不同;要求原串行请求与扩展调用顺序时使用 -j 1。该预算不限制外部命令扩展及其子工具自行创建的线程。
输出与发布:
默认输出为 workspace 根的 notist-output / package.name;独立包以自己的包根作为 workspace 根。site.output 和 --out-dir 指定最终目录,不追加包名。
构建检查配置、资源与输出安全,再暂存并发布;失败保留该包的旧产物。
--out-dir 要求本次只选择一个站点。workspace 按包逐个发布,某个包失败会停止后续构建,不回滚已经成功发布的其他包。
成功时打印页数与绝对输出路径,例如
22 pages → /path/notist-output/manual。
# 当前包
# 所有构建阶段共用至多 8 个工作线程
# 串行构建,便于诊断和性能对照
# 构建整个 workspace
# 按名称选择 workspace 成员
# 临时输出位置,相对调用者目录
预览:notist serve
选项 | 默认 | 说明 |
|---|---|---|
| 当前包 | 按包名选择一个 workspace 成员。 |
|
| HTTP 监听主机名或 IP 地址,IPv6 直接写 |
| 优先 | 显式指定时严格使用该端口; |
| 无 | 完整监听地址,如 |
| 关闭 | 保留每一轮构建的终端输出;重定向、管道和 CI 环境也会自动关闭清屏。 |
serve 与 build 使用同一份 package / site 配置,不需要额外选择发布目标。初次构建与后续监听重建复用同一个执行器和 -j 设置;HTTP 服务与文件监听线程不计入构建工作线程数。
未指定端口时优先使用 8000,被占用则选择空闲端口;指定端口不可用时则报错。终端输出实际监听地址。
serve 在内存中生成与静态构建相同的产物,监听源文件、模板、样式、数据、配置和实际读取的模块资源。失败时保留上一次成功预览,并明确提示当前展示旧内容;修复后自动重建。预览始终使用根路径 /,静态构建使用 Site 的 base_url。
文件监听在注册前按 site.exclude 剪枝,路径与内容发现一致:相对 content,挂载目录使用 mounts.path 的命名空间。排除目录不递归遍历;隐藏目录、target、node_modules、发布输出和符号链接也不会被递归监听。不递归监听整个包根。修改 Notist.toml 后重新计算监听范围,新增目录和被删除后重建的目录仍可触发预览更新。
exclude 是内容发现过滤,不取消实际构建依赖:模板、静态文件、数据、声明的扩展 watch,以及实际读取的模块和文件仍保留必要监听。隐藏或排除目录中的具体文件只监听其必要父目录,不因此重新遍历整棵目录。站点命令在内容目录外使用的脚本与其他输入应声明在其 watch 中。
使用 -v 查看各阶段进度与耗时;serve -v 同时保留每轮终端输出。进度写入 stderr。
&&
单文件命令
单文件命令分析指定文件,使用最近 Notist.toml 的顶层文档扩展;可通过 --config 指定配置。生成页面需通过 build / serve 运行 SSG 站点扩展。
check
|解析并物化文档,报告全部诊断。文件参数可以是 .not / .md 文档或 .notc 模块;.not 文档还会检查本地的正文链接与锚点。参数是目录时索引该目录并检查其中的文档。
诊断写到 stderr;有任何问题以非零状态退出,并用 check: N issues in <file> 或 check: N issues under <dir> 汇总。
cst / core / json
三个命令把不同层次的表示打印到 stdout:
命令 | 输入 | 输出 |
|---|---|---|
| 单文件 | 无损 CST,不做名称解析或求值。 |
| 单文件 | 降糖后的 core / IR。文档输出求值前的 Item 树; |
| 单文件 | 完整 JSON analysis:语法树、AST、core 与诊断。 |
--eval 在这一组命令中只改变文档的 core / json:core 打印求值后的 Item,json 追加 core 与 evaluation_diagnostics。.notc 的模块分析不经过文档求值。query 的 --eval 见下一节。
query
在文档的表示树上按 selector 选择后代节点,输出 JSON。--eval 时在求值后的树上选择。
selector | 匹配 |
|---|---|
|
|
|
|
| 构造函数名;扩展函数按注册名匹配,内置构造不区分 ASCII 大小写。 |
| 调用的函数身份。 |
| 内容层级。 |
html
渲染单个文档为 HTML,并把实际使用的组件资源写入目录;默认输出目录是 target/notist-html。命令在 stdout 打印生成的 index.html 路径。
适合检查组件和单页呈现。构建完整书籍或站点时使用 build。
lsp
通过 stdio 运行语言服务;--config 指定编辑器会话使用的清单。lsp 是默认 feature 的一部分;构建时关闭 lsp feature 则不提供该子命令。
提供诊断、文档大纲、悬浮与定义跳转,采用全文同步。每批输入以全部未保存文件覆盖磁盘资源,创建新 Vault;查询复用同批的分析、环境、源码导航与索引,不重新运行扩展。模块编译与导入绑定缓存可跨批次复用。
文档使用与单文件 check 相同的 id 与同文档锚点检查。链接跳转共用工作区索引的目标分类;跨文件锚点在同批输入中读取直接引用的目标文档,优先使用未保存内容,不递归扫描整个工作区。
文档扩展只运行 beforecheck 与 aftercheck;不执行求值、after_evaluate 或 site.extensions。command 扩展仍是同步执行,没有超时或取消;每批输入仍会刷新全部打开文档,没有编辑防抖或按依赖选择性重分析。
诊断、输出与退出码
成功返回
0,失败返回非零(当前为1)。诊断与人类可读错误写到 stderr;JSON、CST、core 等机器输出写到 stdout。
build的页数摘要在 stdout;serve的地址行在 stdout,构建状态在 stderr。warning 不阻止
build发布;阻止构建的错误会保留旧产物(build)或旧预览(serve)。终端颜色与清屏按 TTY 自动判断;重定向、管道和 CI 不输出清屏控制序列。
常见工作流
# 构建并部署文档
# 本地预览,指定端口
# 检查一份文档或整个目录
# 查看 IR 与求值结果
# 按标签或函数选择节点,交给 jq 等工具
|
# 导出单页组件示例