读:Hot-wiring the Lisp Machine —— 用纯 Elisp 构建零依赖的 Org 静态站点生成器

💡 原文中文,约9600字,阅读约需23分钟。
📝

内容提要

本文介绍了作者使用纯 Emacs Lisp 构建零依赖的 Org 静态站点生成器(ossg)的过程。项目利用 Emacs 内置的 org-export 功能,强调不依赖外部工具。作者从字符串模板出发,逐步改进为使用 Lisp 闭包控制输出,解决了模板扩展性差的问题。通过两遍编译器实现跨路由链接,优化性能,并引入增量热重建机制,显著提高构建速度。

🎯

关键要点

  • 作者使用纯 Emacs Lisp 构建零依赖的 Org 静态站点生成器(ossg),不依赖外部工具。
  • 项目利用 Emacs 内置的 org-export 功能,强调不依赖 Node.js、Hugo 或任何 Elisp 包。
  • 初始方案使用字符串模板,但扩展性差,导致作者转向使用 Lisp 闭包控制输出。
  • 通过两遍编译器实现跨路由链接,优化性能,避免手动维护链接路径。
  • 引入增量热重建机制,显著提高构建速度,支持文件级缓存和依赖图管理。
  • 设计决策包括防御性编程转向进攻性编程,静态资产统一到路由系统,以及不实现垃圾回收。

延伸问答

什么是ossg,它的主要特点是什么?

ossg是一个用纯Emacs Lisp构建的Org静态站点生成器,主要特点是零外部依赖,完全依赖Emacs内置的org-export功能。

作者为什么选择不使用现成的静态站点生成器?

作者发现现成的静态站点生成器无法满足原生Emacs的需求,限制了自定义能力,因此选择从零开始构建ossg。

ossg是如何解决模板扩展性差的问题的?

ossg通过使用Lisp闭包替代字符串模板,允许用户用Elisp控制输出,从而解决了模板扩展性差的问题。

增量热重建机制是如何提高构建速度的?

增量热重建机制通过文件级缓存和依赖图管理,只重建修改的文件,显著提高了构建速度。

ossg的设计决策有哪些值得注意的地方?

作者转向进攻性编程,统一静态资产到路由系统,并放弃垃圾回收,选择简单的全量重建策略。

如何通过ossg实现跨路由链接?

ossg使用两遍编译器,第一遍扫描计算目标URL,第二遍渲染HTML,从而实现跨路由链接的自动替换。

➡️

继续阅读