1 个不稳定版本
使用旧的 Rust 2015
0.0.1 | 2020年7月20日 |
---|
#22 在 #website-generator
89KB
419 行
Rotuli 静态站点编译器
一个正在努力成为最通用内容处理器的项目。
图1:自罗马帝国以来,rotuli 已被广泛使用。
(有些人声称这个术语应该是 "generator" 而不是 compiler,但原始内容是由人而不是软件生成的。)
哲学
一个非常纯净和通用的库,以及一个简单的命令行工具来拉取和挤压内容。
- Rotuli 的首要目标是保持简单和格式无关;它只是你数据的一个支持结构,使得展示你拥有的内容变得稍微容易一些。你拥有的内容和你的方式是你的事。
- Rotuli 也是 rotulus 的复数形式,这是一个古代的卷轴,用来保存书面信息。
- 文本内容进入,如果有标记,则渲染,通过其模板和元数据进行,最终渲染的文档被挤压出来。对每个特殊内容文件重复此过程。非特殊内容直接复制。
- 输入和输出目录列表相同。没有“posts”目录,即“路由”很简单。
- 标记、元数据和模板语言可以是任何你想要的(目前是 rst、yaml 和 jinja/tera)。
- 附加功能基于元数据和模板结构构建。
Rotuli 是通用的;它对你的网站没有任何假设。内容甚至不需要是一个网站。如果你喜欢,可以用它来写书。如果你更喜欢 PDF 格式,可以渲染 PDF(当模板系统支持时)。Rotuli 只提供渲染逻辑、元数据处理、页面分组和一些模板过滤器。内容不知道它在被处理。
Rotuli 甚至没有配置文件。配置文件是邪恶的,因为全局变量是邪恶的。将你的数据视为个体。
源数据不允许有任何模板代码,因为数据应该是工具无关的。有没有图像或代码列表或页面链接的快捷方式?抱歉,没有。使用现代标记语言和持久 URL。
核心功能
- 一致的输入和输出文件层次结构
- 快速增量构建,适用于迭代、实时工作,并最大限度地减少浪费
- 标记处理以结构化内容
- 文档元数据用于描述内容
- 模板引擎用于展示内容
- 根据共享元数据键分组内容
- 草稿元数据键用于排除内容(除非指定)
内容分组功能简单、意义重大且强大。
隐含功能
例如
- 每个渲染页面到源代码库的简单链接
- 多语言内容:使用元数据和分组将翻译链接在一起
- 类别即标签即关键词:在元数据中分组内容,并使用模板列出它们
- 根据年份、月份或日期自动按日期分组的内容(例如,博客文章或新闻)
- 通过内容分组列出页面类型,如博客条目、教程和项目条目
- 根据组中的当前页面索引,链接到集合中的下一页和上一页
为什么
为什么不
非常通用且内容无关的业务意味着必须做出一些妥协。例如
- 元数据中存在一些冗余(例如,多语言组需要唯一的键,而URL是方便的唯一键)
- 博客URL层次结构可以是/year/month/day/title/,但日期仍需要在元数据中指定
- 缺乏博客特定功能可能会让你望而却步,但rotuli将来将支持扩展
- 没有“服务调试模式”来呈现渲染的数据 - 如果你没有本地httpd,请另寻它处
待办事项
- 库/CLI工具分离
- 文档
- 生产事物,例如硬链接到图像以避免大的重复副本
- 图像缩略图
- 语法高亮的代码列表
- 其他标记/元数据/模板引擎
- 一堆内部事物
- 性能基准测试
- 在不分叉整个代码库的情况下,为特定功能提供一些扩展
依赖关系
~10–19MB
~298K SLoC