文档章节
Hugo 模块
用模块管理站点的内容、呈现与行为,本章总览模块机制与相关页面。
章节概览
Hugo 把模块(module)当作最基本的组织单位。一个模块可以是一个完整的 Hugo 项目,也可以是更小的可复用片段,用来提供 Hugo 七类组件(component)中的一类或几类:静态文件、内容、布局、数据、资源、国际化(i18n)资源,以及原型。
模块可以按任意组合与顺序搭配使用,也可以挂载外部目录——包括那些并非 Hugo 项目的目录——从而在效果上得到一个统一的文件系统:项目、主题、第三方模块与外部目录里的文件,都像是放在同一棵目录树中。
本章包含以下页面:
| 页面 | 内容 |
|---|---|
| 简介 | 模块是什么、能提供哪些组件、为什么有用 |
| 使用模块 | 前置条件、导入、更新、整理、缓存、vendor 与本地开发 |
| 主题组件 | 把主题拆成多个可组合组件,以及覆盖顺序 |
| Node.js 依赖 | 声明并合并各模块的 Node.js 依赖 |
使用模块的前置条件
与模块打交道需要在机器上安装 Git 与 Go 1.18 或更高版本。此外还要把项目本身初始化为模块,也就是在项目根目录执行 hugo mod init,它会生成 go.mod 文件;这一步完成后,才能在项目配置的 [module] 区段中声明要导入的模块。具体步骤见使用模块。
为什么需要模块
模块机制主要解决可复用性与依赖管理的问题:
- 主题以模块的形式分发,安装与升级都交给 Go 的依赖工具链,版本记录在
go.mod与go.sum中,构建结果可重复。 - 一个项目可以同时导入多个模块,并按顺序决定优先级,从而把「主题基础部分 + 若干可复用片段」组合成一个主题。
- 模块不仅能提供模板与静态文件,还能提供内容、数据、i18n 资源与原型,因此可以共享的不只是外观,也包括内容结构与站点行为。
- 非 Hugo 项目的目录同样可以挂载进来,把外部来源的文件纳入同一套目录结构。
模块化的目录结构
Hugo 为项目、主题与模块定义了一套标准的组件目录。导入模块时,模块内的这些目录会自动挂载到 Hugo 的统一文件系统中;也可以在项目配置里手动挂载任意目录,包括来自非 Hugo 项目的目录。项目里各目录各自的职责见目录结构,挂载的写法见使用模块中的挂载一节。
相关命令
模块的日常操作集中在 hugo mod 命令族中,本站已收录的页面包括:
- hugo mod:模块相关子命令的父命令。
- hugo mod init:把当前项目初始化为模块。
- hugo mod get:取回或升级模块依赖。
- hugo mod tidy:清理
go.mod与go.sum中不再使用的条目。 - hugo mod vendor:把依赖复制到项目内的
_vendor目录。 - hugo mod graph:打印模块依赖图。
- hugo mod npm pack:合并各模块的 Node.js 依赖。
- hugo mod clean:清理模块缓存。
本章内容
- 简介 模块的基本概念、可提供的组件类型,以及模块化带来的好处。 (今天)
- 使用模块 模块的前置条件、导入与覆盖顺序,以及更新、整理、缓存与本地开发。 (今天)
- 主题组件 把主题拆成多个组件,通过继承与覆盖顺序组合成一套完整主题。 (今天)
- Node.js 依赖 在模块中声明 Node.js 依赖,并合并到统一的 npm 工作区,避免重复安装。 (今天)