为什么你应该自己编写静态网站生成器
Posted on November 3, 2023 from Nanyang,China我以前使用过很多静态网站生成器,包括 Jekyll、Hugo、11ty、Zola、Next.js 和 Astro。 它们各自都有自己的功能和特点,但最重要的是,你必须根据框架的期望来架构你的网站。
从昨天开始,我的个人网站由我自己的SSG1驱动。 它并不意味着可重用性,它只是普通的代码 - 解析和生成这个特定网站的文件。
哦,我真的喜欢它。
为什么?
最近,当Vercel发布了 Next.js 14 时,我一些通过过的朋友还在使用 Next.js 12,并且真的感到了升级的压力,以免落后得更多。 这使我思考了我的网站的持久性和健壮性,所以我决定我不想依赖于其他人的决策,并追随我不关心的版本升级。
而且,即使你的内容只是Markdown和媒体,但几乎围绕它的所有东西在切换框架时都需要进行更新-有时甚至在升级时也是如此。 当我之前使用Astro时,我想要静态生成OG图像,并经过一些研究,设法构建了它,甚至写了一篇文章来解释如何做到这一点。 你失去了所有这些自定义逻辑。
另外,你可以选择自己的技术栈。 想用AsciiDoc来写你的内容?没有人能阻止你!
我知道你在想什么,你是对的,它比使用已经存在的东西要复杂得多。 但它也更有趣。 你可以用它做任何事情,而且你不需要阅读文档或尝试理解其他人的架构决策—只需开始编写代码!
好的,告诉我你是如何做到的
在考虑要使用不需要JavaScript的动态生成搜索功能2之后,我决定继续使用静态网站。 它更快,你不必担心安全性或稳定性。 当然,我选择了地球上最好的编程语言,Rust(我所钟爱的)。 等等,回来,这不是一篇关于Rust的文章!
一个静态网站生成器主要需要进行五件事:
- 将Markdown转换为HTML
- 渲染HTML模板
- 编译CSS
- 生成RSS订阅源
- 生成网站地图
其中后三项可能您甚至都不需要。 你喜欢的编程语言肯定有一个Markdown解析器和一个模板引擎。
对于Rust,我选择了这些包3:
- comrak 和 gray_matter 用于解析Markdown和frontmatter
- maud 用于编译时模板
- grass 用于SCSS编译
- rss 用于(你猜对了)生成RSS订阅源
- quick-xml 用于生成网站地图
一旦我得到了所需的工具,我就开始编写软件了。 我构建了一个用于解析我的内容的工具,一个用于渲染所有不同模板的工具,一个用于生成RSS的工具,一个用于生成网站地图的工具...真的就是这样!
当需要为这个网站添加OG图像时,我可以选择最好的库并构建它。
现在怎么办?
我希望这篇文章或者让你确信自己编写自己的生成器没有价值,你想继续使用框架,或者让你对另一边的事物感兴趣。
更新: 这篇文章在Lobste.rs和Hackernews上引起了一些讨论。
-
SSG是指静态网站生成器,如果你还没有创作出这个关联。 ↩
-
亵渎! ↩
-
如果我选择Go语言,我可能会看一下 goldmark、goldmark-frontmatter、html/template 和 encoding/xml。 ↩