A note from the authors: Some of the information and instructions in this book are now out of date because of changes to Hugo and the blogdown package. If you have suggestions for improving this book, please file an issue in our GitHub repository. Thanks for your patience while we work to update the book, and please stay tuned for the revised version!

In the meantime, you can find an introduction to the changes and new features in the v1.0 release blog post and this "Up & running with blogdown in 2021" blog post.

— Yihui, Amber, & Alison

2.1 Static sites and Hugo

静态站点通常由 HTML 文件(具有可选的外部依赖项,如图像和 JavaScript 库)组成,并且无论谁访问网页,Web 服务器都会向 Web 浏览器发送完全相同的内容。当请求页面时,服务器上没有动态计算。相比之下,动态站点依赖服务器端语言来执行某些计算,并根据不同的条件发送可能不同的内容。通用语言是 PHP,动态站点的典型示例是网络论坛。例如,每个用户都有一个个人资料页面,但这通常并不意味着服务器为每个用户存储了不同的 HTML 个人资料页面。相反,服务器将从数据库中获取用户数据,并动态呈现个人资料页面。

对于静态站点,您访问的每个 URL 通常都会在服务器上存储相应的 HTML 文件,因此在向访问者提供文件之前无需进行任何计算。这意味着静态站点的响应时间往往比动态站点更快,而且它们也更容易部署,因为部署只是意味着将静态文件复制到服务器。动态站点通常依赖于数据库,您必须安装更多软件包才能为动态站点提供服务。有关静态站点的更多优点,请阅读 Hugo 网站上的 “Benefits of Static Site Generators” 页面。

现有的静态站点生成器有很多,包括 Hugo、JekyllHexo 等。它们大多数可以构建通用网站,但通常用于构建博客。

我们喜爱 Hugo 的原因有很多,但有几个原因最为突出。与其他静态站点生成器不同,Hugo 的安装非常简单,因为它为大多数操作系统提供了一个不依赖的可执行文件(请参见 Section 1.1)。它还被设计为比同类静态站点生成器更快地呈现数百页内容,据报道可以在大约 1 毫秒内呈现单个页面。最后,Hugo 用户社区在 Hugo discussion forumGitHub issues 上都非常活跃。

尽管我们认为 Hugo 是一款出色的静态站点生成器,但确实缺少一个且仅有一个主要功能:对 R Markdown 的支持。这基本上就是 blogdown 包的全部要点。1 这个缺失的功能意味着您无法在网页上使用 R 代码轻松生成结果,因为您只能使用静态 Markdown 文档。另外,Hugo 默认的 Markdown 引擎是 “Blackfriday”,功能不如 Pandoc。2

Hugo 使用特殊的文件和文件夹结构来创建您的网站(Figure 2.1)。本章的其余部分将提供有关以下文件和文件夹的更多详细信息:

  • config.toml
  • content/
  • static/
  • themes/
  • layouts/
Possible files and folders created when you create a new site using blogdown.

FIGURE 2.1: Possible files and folders created when you create a new site using blogdown.


  1. 另一个动机是创建新页面或帖子的更简单方法。静态站点生成器通常提供创建新帖子的命令,但您通常必须在使用这些命令后打开并修改手动创建的新文件。我对此感到非常沮丧,因为我正在寻找一个图形用户界面,我可以在其中填写标题、作者、日期和有关页面的其他信息,然后我就可以立即开始编写内容。这就是为什么我提供了 RStudio 插件 “New Post” 和函数 blogdown::new_post()。在过去的几年里,每次我要手动或通过 Jekyll 命令行创建新帖子时,我都讨厌它。最后,在完成 RStudio 插件后,我又对博客上瘾了。↩︎

  2. Pandoc 支持已添加到 Hugo pull request: https://github.com/gohugoio/hugo/pull/4060。不过,我认为支持相当有限,我建议您使用 R Markdown 格式,因为 Hugo 中提供了官方 Pandoc 支持,您无法自定义 Pandoc 命令行选项,渲染不会被缓存(它可能很慢),并且您将无法使用 bookdown 包中的任何 Markdown 扩展(例如对图形标题进行编号)。↩︎