8个版本

0.3.1 2020年3月19日
0.3.0 2019年9月13日
0.2.1 2018年3月25日
0.2.0 2016年12月29日
0.1.0 2015年11月14日

#26 in #生成HTML

33 每月下载量
用于 5 个crate(4 个直接)

GPL-3.0 许可证

62KB
1.5K SLoC

Gazetta 是用 Rust 编写的静态网站生成器。它包含四个部分

  1. Horrorshow,一个基于 Rust 宏的 HTML 生成器。
  2. 框架。这个库集包含了大部分逻辑,负责从你的网站数据文件生成模型和视图。
  3. 渲染器。这是实际渲染 HTML 的逻辑所在。如果你需要精细控制网站的 HTML,你应该从这个仓库分叉。然而,99% 的情况下,你应该能够通过修改这个项目以外的部分来充分自定义你的网站。
  4. 你的网站数据。这包括你的网站内容和资产(样式表/JavaScript)。你可以在这里找到我的 数据,以及一个用于启动的简单示例网站 这里

平台

我只在 64 位 Linux 上测试了 Gazetta,但它应该适用于所有 *nix 平台。然而,它可能不会在 Windows 上工作(我假设路径中的正斜杠)。欢迎提交补丁!

快速入门

  1. 下载并编译 gazetta-bin (cargo build --release)。除非你不想承担 15x-30x 的性能损失,否则请使用发布模式进行构建。
  2. 分叉并克隆 gazetta-bootstrap
  3. 编辑配置、主页和主题,使其符合你的需求。
  4. 手动或使用 gazetta 二进制文件创建一些新页面。例如:gazetta new blog "Hello World" 将创建一篇“Hello World”博客文章。
  5. 在存储库中的任何位置运行 gazetta render /路径//输出 以渲染您的网站。

数据目录布局和文件格式

这是您的网站数据。

配置

gazetta.yaml

这是网站的内核配置。它可以用来自定义渲染网站上的任何页面时可用的高级变量。它必须指定

  • 标题:网站标题。
  • 基本:网站的基URL。

如果您使用的是默认渲染器(gazetta-bin),则还必须指定一个 作者(见人员部分)格式

并且可以指定一组导航链接

nav:
# If relative, href is relative to the site base.
  - title: href

资产

/
└── assets/
    ├── javascript/
    │   ├── 0-example1.js
    │   └── 1-example2.js
    ├── stylesheets/
    │   ├── 0-example1.css
    │   └── 1-example2.css
    └── icon.png

所有文件都是可选的。

  • icon.png:网站的图标。
  • javascript:网站的JavaScript文件。它们将在构建时按字典顺序连接。
  • stylesheets:网站的样式表。它们将在构建时按字典顺序连接。

assets中的所有其他文件都将被忽略。

条目

一个条目由以下内容组成

  1. 一个必填的索引文件(index.txtindex.htmlindex.md)。
  2. 一个可选的包含静态文件的static目录。
  3. 任何数量的子条目。

所有索引文件都必须有一个yaml头。此头必须包括一个标题以及您的指定渲染器所需的任何其他内容。默认情况下,该头还可以包括

  • 日期:格式为YYYY-MM-DD的日期。
  • 索引:这表示当前页面是一个索引。如果指定,所有子页面都将附加到页面上。有关更多信息,请参阅索引。
  • cc:将此页面链接到指定的索引页面,就像它是子页面一样。这对于使页面出现在多个标签/类别中非常有用。

如果您使用的是默认渲染器,则头还可以包括

  • 作者:页面的作者。
  • 关于:此字段表示此页面是关于某人的。提供的人员信息将在页面顶部渲染。

静态目录内部的所有目录和文件将按原样复制到输出目录中。这是一个放置每页静态媒体的好地方。

索引

索引字段可以是布尔值或具有以下可选字段的表格

# The sort direction and field: [+-](date|title)
sort: date

# How many entries to list per page or false to not paginate.
paginate: false

# The directories to include in the index (in addition to explicitly CCed
# entries).
directories: .

# The maximum number of entries to include in the index or false to include all
# entries.
max: false

人员

指定人员时,您可以只写出他们的名字或使用以下表格

name: My Name # Mandatory
email: email
photo: photo
key: pgp_key_url
nicknames:
  - first nick
  - second nick
also: # A list of profiles around the web.
 - "GitHub": github_url # example
 - "reddit": reddit_profile_url  # example

代码质量

我对整体架构感到满意,但有些代码可能需要一些关爱(主要的渲染函数特别糟糕)。再次欢迎补丁。

性能

Gazetta非常快;这就是为什么我不费心显示进度。然而,仍有改进的空间

  1. Gazetta执行了大量的系统调用(文件I/O)。我们可能可以显著减少这一点。在我的机器上,超过一半的运行时间是系统时间。
  2. yaml-rust很慢(根据callgrind)。我已经考虑过toml,但转换会很痛苦。
  3. 索引构建算法是 Θ(num_indices*num_entries)。这可以减少到 Θ(num_entries),但是num_indices通常相当低,因此这只有在我们可以将新算法运行时间的常数乘数保持低的情况下才有意义。
  4. 我们真的在乎吗?我的网站(约75页)在我的笔记本电脑上构建时间为50毫秒。

lib.rs:

Gazetta是一个静态网站生成器,这个crate包含核心功能。

如果您只想使用 gazetta,请查看项目页面

如果您想扩展 gazetta,您应该分叉gazetta-bin,然后阅读gazetta文档。《gazetta》包含一些用于生成静态网站的额外抽象,但并非绝对必要(因此它们不是内置到 gazetta-core 中)。

依赖项

~3MB
~73K SLoC