hugo
是一个静态网页生成器工具,官方声称是世界上最快的构建网页的框架。也是一个最流行的开源静态网站生成器。凭借器惊人的速度和灵活性,让构建网站变得再次有趣。它的底层实现使用go语言
开发,相比jekyll
框架,hugo
更适合构建拥有大量文章的大型网站。因为正如官方所说的,是世界上最快的构建框架。得益于go语言
的运行效率。
hugo的版本分三种: 标准,扩展,扩展与部署(standard, extended, and extended/deploy.) 区别如下:
功能 | extended 版本 | extended/deploy 版本 |
---|---|---|
当处理图片时,会把图片编码为WebP格式。你可以用任何版本都能解码WebP图片。 | ✔️ | ✔️ |
使用内嵌的LibSass转义器将Sass转义为CSS,你可以使用任何版本的Dart Sass转义器。 | ✔️ | ✔️ |
你可以直接部署你的网站至Google Cloud Storage bucket,一个AWS S3 bucket,或者是一个Azure Storage container。 | ❌ | ✔️ |
如果你已经有其他工具的部署方案而不需要hugo的extended/deploy版本,那么推荐使用extended版本。
1、使用包管理器安装
Chocolatey
Chocolatey 是一个免费开源的windows包管理器,安装hugo的extended命令如下:
Scoop Scoop 也是一个免费开源的windows包管理器,安装hugo的extended命令如下:
Winget Winget 是微软官方的免费开源windows包管理,安装hugo的extended命令如下:
卸载hugo的extended版本:
2、使用已经编译好的二进制程序安装
预编译好的版本支持各个平台和系统架构,访问latest release网页,滑动到底部资源部分,选择下载适合的版本包文件,解压后安装到你希望的目录下,安装完成后,将安装目录添加到PATH系统环境变量中。新启动一个终端,运行hugo version
验证安装版本。
3、从源码自行编译安装
首先需要满足如下条件:
标准版编译:
扩展版本编译:
扩展/部署版本编译:
安装方式比较:
Prebuilt binaries | Package managers | Build from source | |
---|---|---|---|
容易安装? | ✔️ | ✔️ | ✔️ |
容易升级? | ✔️ | ✔️ | ✔️ |
容易降级? | ✔️ | ✔️ | ✔️ |
自动升级? | ❌ | ❌ | ❌ |
可用最新版本? | ✔️ | ✔️ | ✔️ |
1、使用包管理器安装
2、不同Linux系统的仓库包方式安装
Linux也分为各种发行版本的系统,选择适合你的Linux版本方式安装:(以安装extended版本为例)
Alpine Linux
Arch Linux
分发系统包括EndeavourOS, Garuda Linux, Manjaro, and others.系统
Debian
分发系统包括elementary OS, KDE neon, Linux Lite, Linux Mint, MX Linux, Pop!_OS, Ubuntu, Zorin OS, and others.
Exherbo
1、Add this line to /etc/paludis/options.conf:
2、Install using the Paludis package manager:
Fedora
分发系统包括 CentOS, Red Hat Enterprise Linux, and others.
Gentoo
分发系统包括 Calculate Linux, Funtoo, and others.
1、指定扩展USE标记 到/etc/portage/package.use/hugo里面:
2、Build using the Portage package manager:
NixOS
openSUSE
分发系统包括 GeckoLinux, Linux Karmada, and others.
Solus
Void Linux
3、从源码编译安装hugo
先决条件类似windows:
但是环境变量需要注意:
安装目录是由GOPATH
and GOBIN
环境变量控制. 如果设置了GOBIN
,二进制文件是安装在该目录下。 如果设置了 GOPATH
, 二进制文件会安装在GOPATH
列表里的第一个目录的bin子目录下。 否则二进制文件会安装在默认的GOPATH
($HOME/go or %USERPROFILE%\go
)的bin子目录下。
标准版编译:
扩展版本编译:
扩展/部署版本编译:
安装方式比较
预编译二进制 | 包管理器安装 | 仓库包安装 | 从源码安装 | |
---|---|---|---|---|
容易安装? | ✔️ | ✔️ | ✔️ | ✔️ |
容易升级? | ✔️ | ✔️ | 各种各样 | ✔️ |
容易降级? | ✔️ | ✔️ | 各种各样 | ✔️ |
自动升级? | ❌ | 各种各样 | ❌ | ✔️ |
可用最新版本? | ✔️ | ✔️ | 各种各样 | ✔️ |
每个 Hugo 项目都是一个目录,其中包含有助于您网站的内容、结构、行为和呈现的子目录。
使用hugo命令创建一个站点,会自动生成项目目录结构骨架:
生成的目录结构:
取决于需要,你可能希望组织你的网站配置到子目录
当编译你的网站时,hugo会生成一个Public目录,通常还会创建一个特别的resource目录:
archetypes(原型模板)
archetypes
目录包含新建内容时使用的模板。assets(资源)
assets
目录包含全局资源,通常通过资源管道进行处理。这些资源包括图片、CSS、Sass、JavaScript 和 TypeScript 文件。config(配置)
config
目录包含你的网站配置,可能分为多个子目录和文件。如果是配置简单或者不需要根据不同环境变化的项目,可以在项目根目录只用一个名为 hugo.toml
的配置文件即可。content(内容)
content
目录包含组成你网站内容的标记文件(通常是 Markdown)和页面资源。data(数据)
data
目录包含数据文件(支持 JSON、TOML、YAML 或 XML 格式),用于扩展内容、配置、本地化和导航。i18n(国际化)
i18n
目录包含多语言网站使用的翻译表。layouts(布局模板)
layouts
目录包含将内容、数据和资源转化为完整网站所需的模板。public(发布目录)
public
目录包含生成的网站内容,当你运行 hugo
或 hugo server
命令时生成。Hugo 会根据需要重建该目录及其内容。resources(资源缓存)
resources
目录包含 Hugo 资源管道处理后生成的缓存输出,如 CSS 和图片。每次运行 hugo
或 hugo server
命令时会根据需要重建此目录及其内容。static(静态文件)
static
目录中的文件会在构建网站时直接复制到 public
目录。例如:favicon.ico
、robots.txt
以及验证站点所有权所需的文件。在引入页面包(Page Bundles)和资源管道之前,static
目录也常用于存放图片、CSS 和 JavaScript。themes(主题)
themes
目录包含一个或多个主题,每个主题在自己的子目录中。
hugo创建一个联合文件系统,运行你去挂载两个或更多目录到相同的目录下。例如,假设你的Home主目录中包含了一个hugo项目目录,在另一个目录下包含共享目录:
当你用挂着方式构建你的网站时,你可以包含这个共享目录。在你的网站配置中如下配置即可:(选择toml,yaml,json三种方式配置其一)
当您将一个目录覆盖在另一个目录之上时,必须同时挂载这两个目录。 Hugo 不遵循符号链接。如果您需要符号链接提供的功能,请使用 Hugo 的联合文件系统。
挂载后,联合文件系统就有如下目录结构:
你可以挂载目录到 archetypes, assets, content, data, i18n, layouts, and static。
也可以使用hugo modules从git仓库挂载目录。
创建主题命令:
创建的目录结构如下(子目录未展示):
Hugo 使用上述联合文件系统,将每个目录挂载到项目中的相应位置。当两个文件具有相同路径时,项目目录中的文件优先。例如,这允许您通过将副本放置在项目目录中的相同位置来覆盖主题的模板。
如果您同时使用来自两个或多个主题或模块的组件,并且发生路径冲突,则第一个挂载的文件优先。
构建命令:
开发调试命令:(包含热加载)
开发调试,自动定位到最后修改处
构建网页时,front matter里指定的时间是未来文章,草稿标记的文章,过期时间文章,发布时间文章不会被构建(draft, date, publishDate, and expiryDate )。如果需要覆盖默认构建行为,加上参数:
编译生产环境:
或
powershell
cmd
或
最终会生成编译后的内容到public目录下,将该目录下的文件发布到网站托管平台,如 AWS Amplify, CloudCannon, Cloudflare Pages, GitHub Pages, GitLab Pages, Netlify, firebase hosting等。