28个版本 (4个重大更新)
0.5.0 | 2024年7月20日 |
---|---|
0.4.1 | 2024年7月17日 |
0.3.4 | 2024年7月17日 |
0.2.1 | 2024年1月27日 |
0.1.19 | 2024年1月23日 |
#64 在 模板引擎 中
486 每月下载量
在 kismesis-ssg 中使用
145KB
4.5K SLoC
Kismesis 引擎
Kismesis静态站点生成器的引擎,鼓励每个人制作语义化和可访问的静态站点。
如何制作插件
这是一份基本的入门指南。因为它还有正式的文档在途中,所以它没有告诉你很多。
- 首先,创建一个新的Rust库。
- 将
extism-pdk
添加到该库中。 - 使用
pdk
功能将kismesis
添加到该库中。 - 在
lib.rs
中添加use extism_pdk::*
和kismesis::pdk::*
. - 创建一个函数
fn parser(Json(input): (Json<PluginInput>)) -> FnResult<Json<PlugResult>>
- 确保你的程序不会panic,因为这会导致错误报告,这对您和用户都几乎没有帮助。FnResult使用anyhow::Error,所以你经常可以使用elvis运算符。
- 使用
PluginParseError::new()
在你的某个标记的位置或输入中给出的范围内创建一个新的错误。 - 使用
.add_hint()
向错误添加提示。
查看 extism-pdk
的文档以获取关于 Extism 特性的帮助,以及 Kismesis 文档以获取关于管理 Kismesis 令牌和 AST 节点的帮助。
Kismesis 插件目前不稳定,可能受到任何类型的破坏性更改。正在制作更符合人体工程学的 API。
为什么这个没有被嵌入到 SSG 中
Kismesis 引擎作为 Kismesis 静态站点生成器之外的独立 crate 构建,因为这样就可以简单地导出必要的类型作为公共的,以便允许插件。使此过程更符合人体工程学的必要接口尚待推出,但按照目前的状况,制作插件是完全可以的。
路线图
- 在单独的线程中运行插件以提供新的堆栈(或找出优化此 crate 堆栈使用的方法)
- 改进 PDK,以便使事情更简单
- 允许递归模板化
- 输出不可反驳的无限递归的错误(这只能由无条件相互引用的宏和表达式引起,将来,由模板自引用引起)
- 以某种方式意识到两个值通过引用来回弹跳了很多?并为这种情况报告错误。以某种方式。
- 允许插件在 AST 编译后进行第二次遍历,以便它们可以访问几乎完全编译的 AST。
这不是一个清单。项目完成后将从列表中删除。
对站点生成器开发者的警告
Kismesis 引擎仅适用于 Kismesis SSG,然而,如果您想在您的项目中使用 Kismesis,请注意此警告
在引擎中注册文件后,它将保留直到手动删除。知道在哪里删除它至关重要。如果您未能管理好这一点,您的用户将看到指定发生了什么的错误,由于文件可能很大,永远保留它们可能会造成浪费。
在大多数情况下,模板文件可以保留到运行结束。输入文件通常可以在模板化成功或失败后立即删除。
相关项目
- Kismesis 引擎
- The Kismesis Static Site Generator
- The Kismesis Markup Language
您可能会准确地推断出我认为歧义是世界上最有趣的事情。由于所有这些项目都有关联,我认为这基本上是无害的,除非您在同时与 MSPA 相关且与任何与本项目相关的话题(如 Rust、静态站点、Extism、独立网络等)相关的服务器上。如果您发现满足此标准的活跃社区,请与我私信。本节原本是个玩笑,但现在我写这个时,我真的很好奇。
常见问题解答
FAQ 代表未来预期问题和经常提出的问题。
为什么这个名称有歧义?
我觉得很有趣,我认为由于所有命名为 Kismesis 的项目都有关联,所以这是安全和可行的。
为什么您计划在 <div>
时出错?
- 之所以这样做,是因为我们经常将“div”作为一个万能的解决方案,而不是使用更语义化的替代方案,比如
header
、footer
、main
、section
,甚至是button
。如果确实没有更好的选择,那么<container>
将被编译为<div>
。这和Rust中的unsafe
的思考方式相同。- 不,
<button>
的样式化并不比div更难。
- 不,
有关Kismesis SSG的问题,请查看其相应的readme。
依赖项
~0.2–16MB
~163K SLoC