1 个不稳定版本
0.1.0 | 2022年9月13日 |
---|
#318 in 模板引擎
21KB
325 行
Jabberwock
Jabberwock是一个完全用Rust编写的简单静态网站生成器,使用Hatter作为其模板语言。它旨在通过类似Metalsmith的系统实现高度可配置和模块化,同时仍然非常快速和内存安全。
安装
与一些同类工具不同,Jabberwock被设计为一个库而不是可执行文件或命令行应用程序。它可以添加到现有的项目中,或者用于新项目。
Jabberwock可以通过在项目的Cargo.toml
文件的[dependencies]
部分添加以下行来作为依赖项包含
jabberwock = "0.1.0"
copy
、markdown
、templates
、toml
和transpile
功能默认启用。这些分别启用资产复制器、Markdown转换器、Hatter模板转换器、TOML转换器和主要Hatter转换操作。如果需要,它们可以被禁用。
jabberwock = { version = "0.1.0", default-features = false }
基础知识
Jabberwock使用一个非常简单的流程
- 以字节和路径的形式从输入目录读取文件
- 对文件的内容和路径执行一个或多个操作
- 将文件的内容写入相对于输出目录的路径
默认提供了一些常用的静态网站操作,例如转换Markdown、包括模板、从TOML文件加载变量等,但可以通过禁用相应功能来移除。
例如,以下代码从输入目录读取Hatter文件,将其转换为HTML,并将结果写入输出目录
use jabberwock::Generator;
use jabberwock::builtin::HatterTranspiler;
fn main() {
println!("{:?}", generate());
}
fn generate() -> Result<(), String> {
let mut generator = Generator::source("in/")?; // read input files from "./in/"
generator.apply(HatterTranspiler::new())?; // transpile Hatter files to HTML files
generator.destination("out/") // write output files to "./out/"
}
模块化系统允许连接更复杂的操作。例如,以下代码转换Hatter文件,向Hatter函数添加从TOML加载变量的功能,将Hatter文件作为模板包含,将Markdown文件内容作为HTML包含,并复制CSS文件到输出目录
use jabberwock::Generator;
use jabberwock::builtin::*;
fn main() {
println!("{:?}", generate());
}
fn generate() -> Result<(), String> {
let mut copier = AssetCopier::new();
copier.copy("css/", "css/"); // set up copier to copy all CSS files from "./css" to "./out/css"
let mut generator = Generator::source("in/")?; // read input files from "./in/"
generator.apply(copier)? // include CSS files in the output
.apply(MarkdownTranspiler::source("md/"))? // add Hatter function to include transpiled Markdown from "./md/" inside Hatter files
.apply(TemplateTranspiler::source("tmpl/"))? // add Hatter function to include transpiled templates from "./tmpl/" inside Hatter files
.apply(TomlTranspiler::source("vars/"))? // add Hatter function to load TOML from "./vars/" as variables inside Hatter files
.apply(HatterTranspiler::new())?; // transpile Hatter files to HTML files
generator.destination("out/") // write output files to "./out/"
}
有关更多信息,请参阅Jabberwock的文档。
许可
使用Jabberwock时可以选择以下两个许可证之一
- 麻省理工学院许可协议 (MIT) (http://opensource.org/licenses/MIT)
- Apache 2.0 许可协议 (https://opensource.org/licenses/Apache-2.0)
依赖项
~3.5–5MB
~95K SLoC