1 个不稳定版本
0.1.0 | 2023年11月28日 |
---|
#18 in #generate-static
被 lssg 使用
120KB
3K SLoC
工作进度中
Lyr 的静态网站生成器
思路是根据自定义的 Markdown 格式生成静态的 html、css、js 文件。
这使用了一个自定义的 Markdown 解析器,它可能不会完全遵循官方规范。我将其修改到可以满足我的需求,欢迎提交 PR!更多信息请查看 LMarkdown
。
使用方法
安装二进制文件
git clone [email protected]:Lyr-7D1h/lssg.git
cd lssg
cargo install --path .
生成静态文件
lssg {PATH_TO_INDEX_MARKDOWN_FILE} {PATH_TO_OUTPUT_FOLDER}
这是从其内容生成 lyrx 的方法
cd examples/lyrx
lssg ./content/home.md ./build
您还可以使用 Markdown 链接来生成内容
lssg https://raw.githubusercontent.com/Lyr-7D1h/lssg/wip/examples/lyrx/home.md ./build
[!NOTE] 输入 Markdown 文件中的任何链接到其他 Markdown 文件必须包含在输入 Markdown 文件的父文件夹中
LMarkdown (Lyr 的 Markdown)
LMarkdown 尝试遵循 Commonmark Markdown 规范,尽管在某些情况下为了简化页面渲染而有所偏离。
LMarkdown 文件的结构
<!--
{MODULE_CONFIG}
-->
{MARKDOWN}
例如。
<!--
[default]
title="This is the html title"
[blog]
-->
<!--
The first comment on a page is seen as module configuration and is parsed as toml
it has the following format:
[{module_identifier}]
{options}
-->
# Just some header in file
<!-- All HTML comments are ignore in output -->
<!-- The following will generate `http://{root}/test` url based on the markdown file -->
[Check out my other page](./test.md)
<!-- So this in html will turn into `<a href="./test">Check out my other page</a>` -->
架构
简要来说,这就是执行 LSSG 时发生的事情。
Given index markdown file path
|
Sitetree: Recursively find links to resources in parsed pages and stylesheets (stylesheets, fonts, icons, other pages)
|
Sitetree: Add these resources as nodes into Sitetree
|
Go through all nodes in tree
if resources
Copy resource
if page => use modular HtmlRenderer to turn lmarkdown tokens into html, and write to file
HtmlRenderer: Create Domtree
|
HtmlRenderer: Delecate modification of Domtree to modules based on LMarkdown Tokens
|
BlogModule: Render Token if applicable
|
DefaultModule: Fallback rendering of Token, it should render every kind of Token
路线图
- 使文本更易于阅读,如 Medium (https://blog.medium.com/what-were-reading-are-you-busy-or-are-you-productive-5beca01c0f3b)
- 添加 html! 宏,以便在编译时将 html 转换为 rust
- 将默认选项作为属性(属性)的根,不需要 [default] 块
- 添加恢复和日志记录而不是恐慌
- 在断链时恐慌
- 下载并安装指向外部资源的链接(字体、css、编码等)
- 使从 notion 导入页面更容易
- 不要将所有文件加载到内存中,可能会对大型资源文件或大型站点造成问题
- 代码支持
- 为 css 添加文件最小化功能
- 自定义样式支持
- 文档模块
已知错误
- 根引用不起作用
依赖关系
~9–22MB
~311K SLoC