Hugo vs. Jekyll: 领先的静态网站生成器对比

如果您正在构建一个新网站,静态网站生成器可能是适合您的平台。
435 位读者喜欢这篇文章。
A graduate degree could springboard you into an open source job

Opensource.com

除非您的精神动物是艾米莉·狄金森,否则当您创造出某样东西时,您会希望与世界分享。分享您的作品意味着您需要一个网站。当然,您可以简单地参与数字佃农,并使用各种社交媒体网站来让您的作品展现在观众面前。当然有很多选择……而且不仅仅是“传统的”社交媒体网站。在 Artstation、Flickr、Soundcloud 和 Wattpad 等平台上,无论您的媒介是什么,都有适合您的出口。

实际上,您应该使用这些网站。毕竟,人们都在那里。然而,这些地方没有一个是真正属于您的。没有一个是您可以控制的家,也没有一个您可以确保它会一直存在,让人们可以找到,而不用管社交媒体的潮流是兴盛还是衰落。

控制。这就是拥有您自己在网络上的位置的价值。

但本文不是关于为您的网站设置域名和托管。而是关于之后的步骤,即实际制作该网站。对于很多人来说,典型的选择是使用像 WordPress 这样的东西。它在大多数托管提供商上都是一键安装,并且有一个巨大的插件和主题市场可供选择,具体取决于您要构建的网站类型。但是,WordPress 不仅对于大多数网站来说有点杀鸡用牛刀,而且它还为您提供了一个动态生成的网站,其中包含许多活动部件。如果您不及时更新所有这些部件,它们可能会构成重大的安全风险,并且您的网站可能会被劫持。

另一种选择是拥有一个静态网站,服务器端没有任何动态生成的内容。只有好的旧 HTML 和 CSS(也许还有一些 Javascript 用于修饰)。这种选择的缺点是,您一直被降级为自己手动编写所有内容。这当然是可行的,但您只是想要一个分享您作品的地方。您不应该为了做到这一点而必须了解底层 Web 设计的所有特性(以及跨浏览器兼容性的巨大难题)。

静态网站生成器应运而生。您获得了静态 HTML 页面的速度和安全性,但工作流程更接近动态网站的便利性。静态网站生成器领域的两个领跑者是 Hugo 和 Jekyll。(顺便说一句, Paolo Bonzini 有一篇关于 Jekyll 入门的精彩文章。)但是,哪一个才是适合您的正确选择呢?希望在本文结束时,您会有一个更好的主意。我们将根据启动速度、主题可用性、编辑工作流程和可扩展性来评估这两种静态网站生成器。

入门

公平警告,这两种工具都需要您从命令行使用它们。大多数命令都很简单易记,但让我们相应地调整我们的期望。这不是一个点击式界面。

Jekyll 和 Hugo 的安装都非常简单。Jekyll 以 RubyGem 的形式安装,而 Hugo 提供了一个非常方便的一体化二进制文件,让您快速入门。由于单一的安装包,Hugo 在这里略胜一筹。虽然 Jekyll 的 RubyGems 安装方法本身也很容易,但它确实要求您已经在您的计算机上正确安装和配置了 Ruby 环境。在 Web 设计师和开发人员社区之外,大多数人还没有设置好这个环境。

但是,一旦安装完成,Hugo 和 Jekyll 在很大程度上势均力敌。它们都有很棒的文档和快速入门指南。您可以使用一个命令启动一个新站点(在 Jekyll 中,它是 jekyll new <your_site>,在 Hugo 中,它是 hugo new site <your_site>)。这为您的站点设置了一个通用目录结构和脚手架。目录结构和基本配置非常相似。Jekyll 使用 _config.yml 文件,而 Hugo 使用 config.toml(尽管如果您更习惯 YAML 或 JSON 语法,您可以在 Hugo 的配置中使用 YAML 甚至 JSON 语法)。每个内容文件顶部的 Front Matter 元数据使用与配置相同的语法。之后,所有页面内容都以 Markdown 编写。

我想说,在让您开始使用您的第一个静态生成的网站方面,Jekyll 比 Hugo 略有优势,因为它从一些基本内容和默认主题开始。当您开始构建您的网站时,您可以使用这些作为示例模板。Hugo 没有示例内容,甚至没有默认主题。话虽如此,示例内容和默认主题通常是我在使用任何工具制作新网站时首先删除的东西,所以 Hugo 实际上为我节省了一个步骤。

主题

正如我所提到的,Hugo 根本没有附带默认主题,所以这可能是您想要设置的第一件事之一。Jekyll 有一个不错的默认主题,尽管它非常简陋。您可能也想为您的 Jekyll 网站寻找主题。

Hugo 和 Jekyll 都有各种各样的主题,适用于各种网站类型,从单页 ID 主题到包含博客文章和评论的完整多页网站。尽管如此,要找到适合您需求的主题并不容易。在任何一种情况下,主题的去处——Hugo 的 themes.gohugo.io 和 Jekyll 的 jekyllthemes.org——基本上都是一个充满主题截图的大页面。一旦您单击一个主题,您可以获得一些非常详细的信息,但最初的搜索非常粗略。Hugo 的主题页面内置了一些基本标签,但总的来说,主题搜索和展示是我觉得这两个项目真正需要改进的地方。

主题管理也是一个有趣的话题。在这两种情况下,几乎每个主题都是一个 Git 存储库(通常托管在 GitHub 上),您将其克隆到您的网站脚手架中。在 Jekyll 中,还有一个额外的步骤,即使用 RubyGems 的 bundle 来确保主题与站点一起管理。大多数主题已经附带了 Gemfile,这使得这一步骤相对轻松。如果主题还没有 Gemfile,则很容易添加。在 Hugo 中,没有捆绑步骤。只需从您的 config.toml 指向主题,就可以了。

我发现我偏爱 Hugo 处理主题的方式。您将主题克隆(或创建)到 themes 子目录中的它们自己的空间中。这不仅使您在刚开始时相对容易地在主题之间切换,而且还使您能够使用您自己的文件覆盖主题的任何组件文件。这意味着您可以根据自己的口味自定义主题,而无需过多地修改原始主题的源代码,使其保持足够的通用性以供其他人使用。当然,如果您觉得您的更改可能对主题的其他用户有价值,您仍然可以编辑该源代码并向主题维护者提交拉取请求。

工作流程

一旦您设置好初始配置,在 Jekyll 和 Hugo 中构建网站的工作流程就非常相似。两者都有一个实时的 serve 命令,它在您的计算机上运行一个小型、轻量级的 Web 服务器,以便您可以在本地测试您的网站,而无需将其上传到任何地方。真正的好处是,无论您运行的是 jekyll serve 还是 hugo serve,默认情况下都配置为监视您在工作时对您的网站所做的任何更改。当您在浏览器中查看本地服务的网站版本时,它会自动更新您所做的任何更改,无论更改是内容、配置、主题还是仅仅是一个图像。这真的非常方便,而且非常节省时间。

您在这两个系统中都使用 Markdown 语法编写您网站的内容。如果您碰巧不熟悉 Markdown,它是一种非常简化的纯文本写作方式,同时仍然允许一些漂亮的格式标记。它非常容易使用且易于人阅读。并且由于它是纯文本,您的内容(以及您的网站)很容易进行版本控制。这几乎是我现在编写几乎所有内容的主要方式。

可以通过在正确的位置手动创建文件来将新内容添加到您的网站脚手架中。它只需要是一个 Markdown 文件,文件顶部带有适当的“Front Matter”元数据。与配置文件一样,Jekyll 对 Front Matter 使用 YAML 语法,而 Hugo 将接受 TOML、YAML 或 JSON(默认为 TOML)。新的页面文件需要放置在您的网站脚手架中的正确目录中。在 Jekyll 中,您有单独的 _drafts_posts 目录,分别用于存储您的工作草稿和已完成的内容页面。在 Hugo 中,只有一个 content 目录。您在该内容文件的 Front Matter 中指定帖子是否为草稿。

现在,虽然可以手动完成所有这些操作,但 Hugo 确实提供了一些便利功能,以确保您的新文件在脚手架中的正确位置创建,并且文件预先填充了适当的 Front Matter。这仅仅是在终端中转到您的网站目录并键入 hugo new content/<page.md>,其中 <page.md> 是您要创建的新页面。您甚至可以设置称为 archetypes 的模板,这些模板为不同类型的页面(例如,如果您的网站上同时有博客和播客)保存自定义的 Front Matter。

当您的网站准备好发布时,您可以关闭您的预览服务器并发出命令来构建网站的实际页面。在 Jekyll 中,这将是 jekyll build。在 Hugo 中,它只是 hugo。Jekyll 将完成的站点放在 _site 子目录中,而 Hugo 将它们放在名为 public 的子目录中。在任何一种情况下,一旦您这样做,您就拥有了一个完整的静态网站,您可以上传并托管在几乎任何地方。

可扩展性

Hugo 和 Jekyll 都让您能够将您的网站自定义到最小的细节。然而,在可扩展性方面,Jekyll 目前以很大的优势领先,因为它具有插件 API。由于这种插件架构,通过 Jekyll 社区提供的或您自己编写的合理代码片段,相对容易地为您的 Jekyll 生成的网站添加功能。

Hugo 目前根本没有插件 API,因此添加此类功能有点困难。有希望在未来添加编写和包含插件的能力,但似乎还没有人致力于此。

结论

总的来说,Hugo 和 Jekyll 非常相似。这实际上归结为确定您最舒适的工作方式以及您的网站的需求。如果您已经设置了 RubyGems 环境,并且您需要插件的可扩展性,那么 Jekyll 是最佳选择。但是,如果您重视简单的工作流程和自定义网站的直接方式,那么 Hugo 将是您的首选。

我发现我更倾向于 Hugo 的方法,并且在构建少量网站时,我还没有需要任何插件。当然,每个人的需求都有些不同。您会为您的网站选择哪种静态网站生成器呢?

标签
User profile image.
Jason van Gumster 主要编造东西。他写作、动画制作,偶尔也教书,所有这些都使用开源工具。他经营一家小型独立动画工作室,编写了《Blender For Dummies》和《GIMP Bible》,并继续在他[有时]每周的播客《Open Source Creative Podcast》中滔滔不绝地讲述他的经历。在 @monsterjavaguns 上的冒险(和谎言)。

9 条评论

在长时间使用 Jekyll 后,Hugo 是我的首选。您说得对:两者很相似。但 Jekyll 的问题在于,一旦您拥有超过标准网站的内容,它就会变得非常慢(因为 Ruby 很慢)。我有一个只有 80 篇文章的网站,加上标签和类别,情况变得更糟。网站生成需要很长时间,这对于在浏览器刷新方面开发网站来说是很糟糕的。相同的网站使用 Hugo 大约需要 700 毫秒来渲染。我有很多循环、分类和标签。因此,您可以想象,如果您在拥有 800 篇文章的网站上使用 Jekyll,这意味着什么。对我来说根本不可能。我见过 Hugo 的测试,人们生成了超过 100,000 篇文章,渲染时间仍然是几分钟。使用 Jekyll 可能需要几天时间。

感谢这篇精彩的文章。

我使用 Pelican https://blog.getpelican.com/ 作为静态网站生成器。
主要是因为它使用 Python 编写,并支持 reStructuredText 作为标记语言。

我一直在对这个主题进行深入研究,最终选择使用 Jekyll。我完成了一个巨大的项目:https://docs.mendix.com,我们在 Github 上将整个网站开源了。

有趣的项目,我最终将很多东西从 Jekyll 转移到了 Node。例如,在 Node 中生成站点地图往往比在 Jekyll 中更快。

但是... 这里有一个缺点。我们的文档大约有 2700 页(我必须查找真实数字)。生成整个站点大约需要 90 秒。当您迭代小的更改时,这有点烦人。我用 Hugo 做了一个基本测试,它在 500 毫秒内完成。

因此,如果我能够将插件完成的工作转移到 Hugo/Node,我将因为速度而将此重构为 Hugo。

我可能会最终写一篇关于这个项目的类似博客,这早就应该做了。

Hugo 是用 Go 实现的。从名称来看可能很明显,但对我来说并非如此。

Hugo 唯一缺少的是增量构建。
Hugo 每次都重建整个站点。
希望我们很快就能实现这项增强功能。

请看看 Nikola https://getnikola.com/。用 Python 编写。

很好的概述,但我不同意静态网站生成器解决了 WordPress 和“好的旧 HTML 和 CSS”对于那些不了解“底层 Web 设计的所有特性”的人来说太复杂的问题。

如果人们觉得 HTML/CSS 太复杂,他们有多大可能理解 YAML/TOML、Go 模板、Ruby Gems、命令行甚至 Markdown 呢?

我认为 Jekyll 或 Hugo 的用例是一个您想要博客的动态驱动功能(按日期排序的帖子、自动代码片段和索引、类别、标签),而没有动态后端安装和安全问题的站点。您必须是一位非常有经验的开发人员才能理解像这样的工具将如何帮助您维护站点。

您可以使用 SSG 创建一个站点,而无需接触模板,就像您可以使用 Wordpress 创建一个站点而无需接触模板一样:通过使用第三方主题。

而且,好吧,至少在一个 SSG 的情况下,如果 markdown 不符合您的口味,您可以使用自由办公室来创建页面 :-)

https://plugins.getnikola.com/v7/odt/

回复 ,作者 Joel Davies (未验证)

我个人觉得 markdown 比 HTML/CSS 容易得多。我不是 Web 开发人员,我通过快速查找我需要的文档来勉强维持生计。仅仅学习 HTML 对我来说是没用的,因为我在网站上看到的任何令人兴奋的东西总是更复杂,例如使用 javascript 和许多 *.js 工具。我只花了 30 分钟观看视频,就将我所有的技术培训资料从 Word 切换到了 MARKDOWN。但是,我并没有寻找一种简单的方法来使用 Hugo 托管我的 markdown 内容来“自动”获得“复制”按钮。例如,任何用反引号突出显示的代码都应该自动有一个“复制”按钮来复制代码。我什至不知道此功能被称为什么,无法开始搜索它。

回复 ,作者 Joel Davies (未验证)

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.