#static-site-generator #modular #transpile #template #markdown #toml #hatter

jabberwock

一个简单而模块化的静态网站生成器

1 个不稳定版本

0.1.0 2022年9月13日

#318 in 模板引擎

MIT/Apache

21KB
325

Jabberwock

Jabberwock是一个完全用Rust编写的简单静态网站生成器,使用Hatter作为其模板语言。它旨在通过类似Metalsmith的系统实现高度可配置和模块化,同时仍然非常快速和内存安全。

安装

与一些同类工具不同,Jabberwock被设计为一个库而不是可执行文件或命令行应用程序。它可以添加到现有的项目中,或者用于新项目。

Jabberwock可以通过在项目的Cargo.toml文件的[dependencies]部分添加以下行来作为依赖项包含

jabberwock = "0.1.0"

copymarkdowntemplatestomltranspile功能默认启用。这些分别启用资产复制器、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时可以选择以下两个许可证之一

依赖项

~3.5–5MB
~95K SLoC