1个不稳定版本
0.0.1 | 2024年1月25日 |
---|
#78 in #博客
51KB
1K SLoC
polysite
高度可定制、多态的静态网站生成器库,polysite。
polysite受Haskell编写的Hakyll的启发。
与其他静态网站生成器的区别
我知道一些著名的静态网站生成器,比如 Zola。但Zola对我来说定制性不够。
polysite旨在支持创建您自己的静态网站生成器。
许可证
采用Mozilla公共许可证2.0。
lib.rs
:
高度可定制、多态的静态网站生成器库,polysite。
此crate受Haskell编写的Hakyll的启发。
与其他静态网站生成器的区别
我知道Zola,这是用Rust编写的静态网站生成器。但Zola对我来说定制性不够。所以我创建了此crate。
如何使用
如果您只想简单地构建Markdown编写的网站,请使用compiler::markdown::MarkdownCompiler
。示例在examples/simple_markdown.rs
中。
如何创建编译器
如果您想创建新的编译器,为您的编译器类型实现Compiler
特质。用于编译源文件的Compiler::compile
方法。
提供compile!
宏,以简化创建boxed Future的过程。
如果您想管道一些编译器,请使用pipe!
宏。
如果您想使用闭包创建小型编译器,请使用compiler::utils::GenericCompiler
。
元数据
polysite使用元数据来保存编译结果,并且元数据可以用于其他编译。
存在一些默认元数据
_rule
:编译规则名称_version
:编译文件版本_source
:源文件路径_target
:目标文件路径_path
:绝对URL路径_body
:内容主体。一些编译器将结果保存到此元数据中。
您可以使用这些默认元数据来创建新的编译器。
示例
实际示例在此。其他示例在仓库中。
use polysite::{
compiler::{
file::CopyCompiler, markdown::MarkdownCompiler, metadata::SetMetadata,
template::TemplateEngine,
},
*,
};
#[tokio::main]
async fn main() {
simple_logger::SimpleLogger::new().env().init().unwrap();
let template_engine = TemplateEngine::new("templates/**").unwrap().get();
Builder::new(Config::default())
.add_step(
[Rule::new("metadata").set_create(["metadata"]).set_compiler(
SetMetadata::new()
.global("site_title", "Hello, polysite!")
.unwrap()
.global("site_url", "https://example.com")
.unwrap()
.get(),
)],
)
.add_step([Rule::new("posts")
.set_globs(["posts/**/*.md"])
.set_compiler(
MarkdownCompiler::new(template_engine.clone(), "practical.html", None)
.wait_snapshot("posts", 1)
.get(),
)])
.add_step([
Rule::new("markdown").set_globs(["**/*.md"]).set_compiler(
MarkdownCompiler::new(template_engine.clone(), "practical.html", None).get(),
),
Rule::new("others")
.set_globs(["**/*"])
.set_compiler(CopyCompiler::new().get()),
])
.build()
.await
.unwrap();
}
依赖项
~12–22MB
~313K SLoC