#static-site-generator #markup-language #plugin #semantic #ssg #accessible #error

kismesis

一个具有插件和自定义标记语言的静态站点生成器

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模板引擎

Download history 609/week @ 2024-07-12 288/week @ 2024-07-19 48/week @ 2024-07-26

486 每月下载量
kismesis-ssg 中使用

自定义许可证

145KB
4.5K SLoC

Kismesis 引擎

Kismesis静态站点生成器的引擎,鼓励每个人制作语义化和可访问的静态站点。

如何制作插件

这是一份基本的入门指南。因为它还有正式的文档在途中,所以它没有告诉你很多。

  1. 首先,创建一个新的Rust库。
  2. extism-pdk 添加到该库中。
  3. 使用 pdk 功能将 kismesis 添加到该库中。
  4. lib.rs 中添加 use extism_pdk::*kismesis::pdk::*.
  5. 创建一个函数 fn parser(Json(input): (Json<PluginInput>)) -> FnResult<Json<PlugResult>>
  6. 确保你的程序不会panic,因为这会导致错误报告,这对您和用户都几乎没有帮助。FnResult使用anyhow::Error,所以你经常可以使用elvis运算符。
  7. 使用 PluginParseError::new() 在你的某个标记的位置或输入中给出的范围内创建一个新的错误。
  8. 使用 .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”作为一个万能的解决方案,而不是使用更语义化的替代方案,比如 headerfootermainsection,甚至是 button。如果确实没有更好的选择,那么 <container> 将被编译为 <div>。这和Rust中的 unsafe 的思考方式相同。
    • 不,<button> 的样式化并不比div更难。

有关Kismesis SSG的问题,请查看其相应的readme

依赖项

~0.2–16MB
~163K SLoC