从 Hugo 到 Next.js

tl;dr: 本站已迁移至 Pandoc + React 技术栈。

再见Hugo

经过了不到一年的使用我决定彻底放弃 Hugo 极其相关技术栈。

主要原因是

  • Haskell 社区有 Pandoc 这一功能强大的文档转换器。作为长期的函数式编程爱好者和 Haskell 用户我认为我应该使用 Pandoc 而非 Hugo.
  • Hugo 采取一种自有的模板格式可读性、可维护性不佳。
  • Hugo 基本上无法利用 React / Vue 社区的技术栈。
  • 不知道是我用的 Love-It 主题的问题还是 Hugo 程序本身的问题 LaTeX\LaTeX 代码要使用特 有的语法必须用 \\ 代替 \ . 这是我最无法忍受的一点。
  • 一直以来我都想要一种自由度那就是中文的斜体用 楷体字 表示而英文的斜体仍 旧保持 italic 就像 LaTeX\LaTeX 对于中文的处理一样。这涉及到修改转换器本身。

因此我决定迁移到 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 仍然需要调整。