tl;dr: 本站已迁移至 Pandoc + React 技术栈。
❖再见,Hugo
经过了不到一年的使用,我决定彻底放弃 Hugo 极其相关技术栈。
主要原因是:
- Haskell 社区有 Pandoc 这一功能强大的文档转换器。作为长期的函数式编程爱好者和 Haskell 用户,我认为我应该使用 Pandoc 而非 Hugo.
- Hugo 采取一种自有的模板格式,可读性、可维护性不佳。
- Hugo 基本上无法利用 React / Vue 社区的技术栈。
- 不知道是我用的 Love-It 主题的问题还是 Hugo 程序本身的问题, 代码要使用特 有的语法,必须用
\\
代替\
. 这是我最无法忍受的一点。 - 一直以来,我都想要一种自由度,那就是中文的斜体用 楷体字 表示,而英文的斜体仍 旧保持 italic , 就像 对于中文的处理一样。这涉及到修改转换器本身。
因此,我决定迁移到 Pandoc + React 技术栈。
❖技术选型
怎么把 Pandoc 和 React 结合起来,是一个未被探索的问题。我目前采用的方法是
- 写一个 Haskell 程序,把 Pandoc 语法树转换为 jsx (目前被我叫作 `panda`,计划是 后续替换成直接封装一个自己的 `pandoc` 程序)
- 用一个 webpack loader, 在这个 loader 里调用上面的程序
- 基于 Next.js,实现静态 HTML 导出
某种意义上来说,这就是 MDX 的方案。不过我们的优势是,理论上这套方案可以支持所有 Pandoc 能够解析的 markup 语言,例如 markdown, org-mode, reStructuredText 等等。 1
❖实现
目前实现在仓库中。
❖TODO
目前的实现非常脏,主要的问题是
panda
程序与 Next.js 前端耦合过深。- 没有找到一个高质量、兼容
next-theme
、SSG 友好的代码语法高亮组件库。可能需要 自己做一个。 - UI 仍然需要调整。