安装Hugo

Hugo 支持使用 Markdown 语法来格式化文本、创建列表等。本页将展示一些最常见的 Markdown 语法示例。

Hugo Book 项目主题开发指南:从零创建自定义主题 https://blog.csdn.net/gitblog_00389/article/details/148553202

GitLab项目中使用Hugo构建静态网站的完整教程 https://blog.csdn.net/gitblog_00561/article/details/148415296

检查模块代理(如在中国可能需要设置):

$env:GOPROXY = "https://goproxy.cn,direct"
hugo mod get -u

以下是完整翻译与技术解读:


通过 Hugo 模块安装
2022年2月26日 · 2 分钟阅读

🎉 我们全新的模块化主题现已发布!它提供更丰富的功能和更高的灵活性,建议您在新静态站点中尝试使用 :)
本主题提供多种布局(如文章(posts)和文档(docs))。我们的文档使用文档布局(docs layout)。如需查看文章布局(posts layout)的示例,请浏览 Markdown 语法 页面。
本文介绍现代且最新的本地安装方法:通过 Hugo 模块安装主题。


代理设置(可选)

适用场景:位于中国大陆且无 VPN 用户
问题原因:Hugo 模块下载可能失败
推荐代理GOPROXY.CNGOPROXY.IO

$ export HUGO_MODULE_PROXY=https://goproxy.cn

关键说明
Hugo 不识别 GOPROXY 环境变量,必须使用 HUGO_MODULE_PROXY


替代方案:配置文件设置

config.toml 中添加:

[module]
  proxy = 'https://goproxy.cn'

全新站点安装流程

推荐方式:直接使用 Starter Template 模板创建新站点。


现有站点安装流程

步骤 1:将站点转换为 Hugo 模块

$ cd my-blog         # 进入项目目录
$ hugo mod init github.com/me/my-blog  # 初始化模块(替换为你的仓库路径)

作用:创建 go.mod 文件,将站点纳入 Hugo 模块管理系统。


步骤 2:声明主题依赖

$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version]

版本选择

  • 正式版:替换 [version]Releases 中的版本号 (如 v1.0.0)
  • 开发版:使用 @master 获取最新代码
  • 支持:分支名或 Commit ID

步骤 3:复制示例内容

# 克隆示例骨架仓库到临时目录
$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton

# 复制配置文件
$ mkdir config  # 若目录不存在则创建
$ cp -a /tmp/hbs-skeleton/config/* ./config

# 复制核心内容
$ cp -r /tmp/hbs-skeleton/content/* ./content
$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes  # 内容模板
$ cp -r /tmp/hbs-skeleton/static/* ./static         # 静态资源
$ cp -r /tmp/hbs-skeleton/assets/* ./assets         # 资源文件

# 清理临时文件
$ rm -rf /tmp/hbs-skeleton/

目的
快速获得主题必需的配置文件、目录结构和示例内容,避免手动配置错误。


步骤 4:安装 Node.js 依赖

$ hugo mod npm pack  # 生成package.json
$ npm install        # 安装主题所需前端依赖

必要性
主题的 JavaScript/CSS 功能依赖 Node.js 生态库(如 Bootstrap, Sass 等)。


步骤 5:本地预览

$ hugo server        # 启动本地服务器

访问地址:浏览器打开 http://localhost:1313/
特性:支持实时热重载(修改内容自动刷新页面)。


技术解读关键点

  1. 模块化安装优势

    • 版本控制精确(避免手动复制主题文件导致的版本混乱)
    • 自动处理依赖关系(如主题的子模块)
    • 更新便捷(hugo mod get -u 即可升级)
  2. 代理设置原理
    Hugo 模块基于 Go Modules,大陆用户需通过代理加速 github.com 等域的访问。

  3. 示例骨架作用
    hugo-theme-bootstrap-skeleton 提供:

    • 标准目录结构
    • 预配置参数(菜单/主题色等)
    • 示例内容(演示布局效果)
  4. 前端依赖必要性
    即使使用静态站点,现代主题也常依赖:

    • CSS 预处理(Sass/Less)
    • JavaScript 库(Bootstrap 组件交互)
    • 构建工具(Webpack 等)
  5. 持续开发提示
    使用 @master 版本时需注意:

    • 可能包含不稳定代码
    • 更新后需执行 hugo mod clean 清除缓存

重要提示
若安装后页面无样式,检查 themes 目录是否残留旧版主题文件夹(与模块安装冲突,需手动删除)。

全新安装hugo

hugo

hugo version

从错误信息来看,问题主要出在两个方面:

1. 核心错误(导致构建失败)

ERROR TOCSS: failed to transform "book.scss" (text/x-scss). 
Check your Hugo installation; you need the extended version to build SCSS/SASS

原因和解决方案:

  • 问题本质:您使用的 hugo-book 主题需要编译 SCSS/SASS 文件,但当前 Hugo 版本不是扩展版(Extended Version)
  • 验证版本:在终端运行:
    hugo version
    如果输出中没有 extended 字样(如 hugo v0.147.8+extended windows/amd64),说明安装的是标准版。
  • 解决方案
    1. 下载 Hugo 扩展版
      • 访问 Hugo Releases
      • 下载文件名包含 extendedWindows-64bit 的版本(如 hugo_extended_0.147.8_Windows-64bit.zip
    2. 替换现有 Hugo
      • 解压下载的 ZIP 文件,用其中的 hugo.exe 替换您当前使用的 Hugo 可执行文件(通常在 PATH 环境变量路径中)。
    3. 重新运行 hugo server

2. 警告信息(不影响构建但需注意)

WARN Raw HTML omitted while rendering ...

原因和解决方案:

  • 问题本质:Hugo 默认的 Markdown 渲染器(goldmark)出于安全考虑禁止渲染原始 HTML
  • 解决方案(任选其一)
    • 方案A:允许原始 HTML
      hugo.toml 中添加:
      [markup.goldmark.renderer]
        unsafe = true  # 允许渲染原始 HTML
    • 方案B:忽略警告
      hugo.toml 中添加:
      ignoreLogs = ['warning-goldmark-raw-html']

操作总结:

  1. 优先解决 ERROR:安装 Hugo 扩展版(必须步骤)。
  2. 按需处理 WARN:根据是否需要保留 HTML 选择修改配置。

⚠️ 注意:扩展版是 Hugo 主题依赖的常见要求,尤其是使用了 SCSS/SASS 的主题(如 hugo-book)。标准版无法处理 CSS 预处理文件,导致本错误。

标准官方扩展版

这两个文件名中的 withdeploy 后缀是非官方构建的特殊标识。让我解释它们的区别和背景:


1. 标准官方扩展版

hugo_extended_0.147.8_windows-amd64.zip

  • 来源:Hugo 官方 GitHub Releases 发布的标准扩展版
  • 内容:仅包含 Hugo 核心程序(含 SCSS/SASS 编译能力)
  • 用途:满足大多数主题(如 hugo-book)的 SCSS 编译需求

2. 非官方构建版

hugo_extended_withdeploy_0.147.8_windows-amd64.zip

  • 来源:第三方开发者自定义构建(非官方发布)
  • 特殊功能:
    通常集成部署工具(如自动部署到 GitHub Pages/GitLab Pages 的脚本)
  • 典型增强功能可能包括:
    • 内置 rsync/lftp 等部署工具
    • 预配置的部署脚本(如 deploy.sh
    • 简化 CI/CD 流程的封装命令

关键区别总结:

特性官方扩展版withdeploy 版
发布方Hugo 官方团队第三方开发者
核心功能SCSS/SASS 编译包含官方扩展版所有功能
额外功能集成部署工具和脚本
安全性官方认证需信任来源(可能有安全风险)
推荐使用场景本地开发/基础编译自动化部署流程

使用建议:

  1. 解决当前编译问题
    使用官方扩展版即可解决你的 ERROR TOCSS 错误。

  2. 何时选择 withdeploy 版
    仅当你需要开箱即用的部署功能,且信任该构建来源时使用(注意潜在安全风险)。

⚠️ 警告:除非明确知道来源可信(如公司内部构建),否则优先选择官方版本。非官方构建可能包含恶意代码。

官方下载指引:

访问 Hugo Releases → 查找 hugo_extended_0.147.8_Windows-64bit.zip(注意文件名可能略有差异,但始终含 extended 关键字)

PATH 环境变量

在 Windows 系统中,“PATH 环境变量路径"指的是操作系统用于查找可执行文件(如 hugo.exe)的一组目录列表。以下是详细解释和查找方法:

1. 什么是 PATH 环境变量?

  • 当您在命令行输入 hugo 时,Windows 会自动在 PATH 列出的所有目录中搜索 hugo.exe
  • 如果 Hugo 的可执行文件不在这些目录中,您需要输入完整路径(如 G:\tools\hugo.exe)才能运行

2. 查找当前 PATH 的三种方法

方法 1:通过命令提示符/PowerShell

# CMD 命令
echo %PATH%

# PowerShell 命令
$env:Path -split ';'

这会显示所有路径,用分号 ; 分隔

方法 2:通过系统设置(GUI)

  1. Win+S 搜索 “环境变量”
  2. 选择 “编辑系统环境变量”
  3. 点击 “环境变量” 按钮
  4. “系统变量” 区域找到 Path 变量并双击

方法 3:快速查看 Hugo 位置

where hugo

如果已安装,会显示 hugo.exe 的完整路径(如 C:\Program Files\Hugo\bin\hugo.exe

3. PATH 的典型位置

通常包含的目录:

C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Program Files\Hugo\bin\   <-- Hugo 常见安装位置
C:\Users\<用户名>\bin\       <-- 用户自定义位置
C:\tools\                   <-- 常见手动安装位置

4. 替换 Hugo 的步骤

  1. 下载 Hugo 扩展版 ZIP 文件
  2. 解压得到 hugo.exe
  3. 找到当前 Hugo 的安装位置:
    • 如果 where hugo 显示 G:\web\go\GolandProjects\docs\hugo.exe,则替换该文件
    • 或复制到 PATH 中的任意目录(如 C:\Program Files\Hugo\bin\
  4. 验证版本:
    hugo version
    确认输出包含 extended 字样

⚠️ 注意:替换后需重启命令行窗口才能使更改生效。如果 Hugo 不在 PATH 中,建议将其所在目录添加到 PATH 环境变量中。

hugo.exe

要确定 hugo.exe 在 Windows 系统中的具体安装位置,请按照以下步骤操作:

方法 1:使用命令行(最快)

  1. 打开 命令提示符PowerShell
  2. 输入以下命令:
    where hugo
    或(在 PowerShell 中):
    Get-Command hugo | Format-List

方法 2:检查常见安装位置

Hugo 通常安装在以下目录之一:

安装方式典型路径
手动安装C:\Hugo\bin\
C:\Program Files\Hugo\bin\
C:\tools\hugo\
Scoop 安装C:\Users\<你的用户名>\scoop\apps\hugo\current\bin\
Chocolatey 安装C:\ProgramData\chocolatey\bin\
C:\ProgramData\chocolatey\lib\hugo\tools\
Go 编译安装C:\Users\<你的用户名>\go\bin\

方法 3:搜索整个系统

  1. 打开文件资源管理器
  2. 在地址栏输入:
    C:\
  3. 在右上角搜索框中输入:
    hugo.exe
  4. 等待搜索结果(可能需要几分钟)

方法 4:检查环境变量

  1. Win+R 输入:
    systempropertiesadvanced
  2. 点击"环境变量”
  3. 在"系统变量"中找到 Path 变量
  4. 检查列出的路径中是否包含 Hugo 目录

常见情况分析:

  1. 如果 where hugo 无输出

    • 说明 Hugo 未安装或不在 PATH 中
    • 尝试在 VS Code 终端或 GoLand 终端中运行 hugo version,它会显示执行路径
  2. 如果从 GoLand 运行

    • 可能安装在项目相关目录,如: G:\web\go\GolandProjects\docs\hugo.exe
  3. 如果通过包管理器安装

    • Scoopscoop which hugo
    • Chocolateychoco list hugo -lo

💡 提示:找到位置后,建议将包含 hugo.exe 的目录添加到 PATH 环境变量,这样可以在任何位置运行 Hugo 命令。

全新安装

Hugo 使用 Goldmark 进行 Markdown 解析。 Markdown 渲染可以在 hugo.yaml 中的 markup.goldmark 下进行配置。 以下是 MaiyiDocs 的默认配置:

以Hugo模块形式安装

hugo
hugo new site docs --format=yaml
cd docs
hugo mod init github.com/maiyixyz/docs
hugo mod get github.com/imfing/hextra

以Git子模块形式安装

hugo
hugo new site docs
cd docs
git init
git submodule add https://github.com/alex-shpak/hugo-book.git themes/hugo-book
echo "theme = 'hugo-book'" >> hugo.toml
cp -R themes/hugo-book/exampleSite/content.en/* ./content
hugo server --minify --theme hugo-book

更多配置选项,请参阅 Hugo 文档中的 配置 Markup

更改界面

主题安装完成,就要修改里面的信息。

更改网站标题

修改根目录下的hugo.yaml文件:

hugo.yaml
title: "劢奕集团"

更改网站logo

修改以下文件即可

  • \static\images\logo.svg
  • \static\images\logo-dark.svg

根目录下的hugo.yaml文件不要动:

hugo.yaml
  navbar:
    displayTitle: true
    displayLogo: true
    logo:
      path: images/logo.svg
      dark: images/logo-dark.svg

更改网站图标

根目录下\static\favicon.ico

head中加内容

  • layouts_partials\custom\head-end.html

更改底部版权

HTML结构

\layouts_partials\footer.html

html
{{- define "theme-credit" -}}
  <a class="hx:flex hx:text-sm hx:items-center hx:gap-1 hx:text-current" target="_blank" rel="noopener noreferrer" title="MaiyiDocs GitHub Homepage" href="https://github.com/imfing/hextra">
    <span>
      {{- . | markdownify -}}
      {{- if strings.Contains . "Hextra" -}}
        {{- partial "utils/icon.html" (dict "name" "hextra" "attributes" `height=1em class="hx:inline-block hx:ltr:ml-1 hx:rtl:mr-1 hx:align-[-2.5px]"`) -}}
      {{- end -}}
    </span>
  </a>
{{- end -}}

\layouts_partials\footer.html内容里面有 custom/footer.html 是自定义区

  • layouts_partials\custom\footer.html

翻译内容

  • \i18n\zh-cn.yaml里新添加:
hugo.yaml
poweredBy: "由 满意云 驱动"
copyright: "© 2025 劢奕集团文档网站 docs.maiyi.xyz"

Hugo运维

常见命令

hugo

hugo mod clean  #清除模块缓存
hugo mod clean --all  # 彻底清理模块缓存
rm -r public          # 删除构建输出目录
hugo mod get -u  # 更新所有模块
hugo mod tidy   # 清理未使用的依赖

#  Node.js环境常用命令,启动服务器前的命令
$ hugo mod npm pack # 获取主题的 package.json
$ npm install # 安装主题的 Node.js 依赖

# 启动服务器
hugo server
hugo server -D  # 检查是否还有模板错误
hugo server --minify
hugo server --disableFastRender  # 禁用快速渲染以完整重建
hugo server --buildDrafts --disableFastRender  
hugo server --logLevel debug --disableFastRender -p 1313   #提供详细运行日志


#升级
hugo mod get -u #即可升级,确保主题保持最新

好的,这是对提供文本的中文翻译和详细解读:

中文翻译:

本文介绍了传统的本地克隆主题作为 Git 子模块的安装方法。虽然这种安装方法仍然广泛使用,但我们推荐将主题作为 Hugo 模块安装。

从头开始创建新站点

$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton myblog # 克隆骨架项目
$ cd myblog # 进入项目目录
$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap # 添加主题作为子模块
$ sed -i "s/theme:.*/theme: hugo-theme-bootstrap/g" config/_default/config.yaml # 修改配置文件指定主题
$ rm go.mod go.sum # 移除 Hugo Modules 文件(如果存在)
$ hugo mod npm pack # 获取主题的 package.json
$ npm install # 安装主题的 Node.js 依赖
$ hugo server # 启动本地开发服务器

Windows 用户注意: 如果你在 Windows 上操作,请使用以下命令替代上面的 sed 命令(或者使用支持 sed 的环境如 Git Bash、WSL):

xcopy .\themes\hugo-theme-bootstrap\exampleSite /E

sed 命令将 config/_default/config.yaml 文件中的 theme: github.com/razonyang/hugo-theme-bootstrap 替换为 theme: hugo-theme-bootstrap

在现有站点上安装

$ cd myblog # 进入你的 Hugo 站点根目录
$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap # 添加主题作为子模块
$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton # 克隆骨架项目到临时目录
$ mkdir config # 创建 config 目录(如果不存在)
$ cp -a /tmp/hbs-skeleton/config/* ./config # 复制骨架的配置文件
$ cp -r /tmp/hbs-skeleton/content/* ./content # 复制骨架的内容文件
$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes # 复制骨架的原型模板
$ cp -r /tmp/hbs-skeleton/static/* ./static # 复制骨架的静态文件
$ cp -r /tmp/hbs-skeleton/assets/* ./assets # 复制骨架的资源文件
$ sed -i "s/theme:.*/theme: hugo-theme-bootstrap/g" config/_default/config.yaml # 修改配置文件指定主题
$ hugo mod npm pack # 获取主题的 package.json
$ npm install # 安装主题的 Node.js 依赖
$ hugo server # 启动本地开发服务器

重要提示: 如果你克隆的是一个全新的仓库(例如你刚刚 git clone 了你的站点),你需要通过 git submodule update --init --recursive 来初始化并更新子模块。或者,在克隆时直接包含子模块:git clone --recursive <你的仓库地址>

详细解读:

这段文档提供了两种在 Hugo 站点中安装 hugo-theme-bootstrap 主题的方法,都是基于传统的 Git 子模块 (Git Submodule) 方式。文档开头明确说明,虽然子模块方式常用,但官方推荐使用更现代的 Hugo 模块 (Hugo Modules) 方式安装。不过,文档本身重点描述了子模块方式。

方法一:从头开始创建新站点 (Create a New Site from Scratch)

此方法适用于你还没有 Hugo 站点,想以主题作者提供的“骨架”(skeleton)项目为基础快速开始。

  1. git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton myblog:
    • 作用: 将主题作者准备好的“骨架”项目仓库克隆到本地一个名为 myblog 的目录中。这个骨架项目通常包含了一个预配置好的、能立即运行的基本站点结构(config, content 等目录),但不包含主题本身的实际代码
    • 解读: 这是创建新站点的起点,基于作者的最佳实践配置。
  2. cd myblog:
    • 作用: 进入刚刚克隆下来的 myblog 项目目录。后续所有命令都在此目录下执行。
  3. git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap:
    • 作用:hugo-theme-bootstrap 主题的官方仓库添加为当前项目的一个 Git 子模块。子模块会被放置在 themes/hugo-theme-bootstrap 目录下。
    • 解读: 子模块允许你将另一个 Git 仓库嵌入到你的主项目中作为一个特定的子目录。这样做的好处是主题版本可以通过 Git 精确控制(指向特定提交),并且主题的更新可以独立于你的站点进行管理。themes/ 目录是 Hugo 查找主题的标准位置。
  4. sed -i "s/theme:.*/theme: hugo-theme-bootstrap/g" config/_default/config.yaml:
    • 作用: 使用 sed 流编辑器修改 Hugo 的主要配置文件 config/_default/config.yaml
    • 命令详解:
      • -i: 直接修改原文件(而不是输出到屏幕)。
      • "s/theme:.*/theme: hugo-theme-bootstrap/g": 这是一个 sed 的替换命令。
        • s/: 表示开始替换。
        • theme:.*: 查找以 theme: 开头的行(.* 匹配该行 theme: 之后的所有内容)。
        • theme: hugo-theme-bootstrap: 将匹配到的整行替换为 theme: hugo-theme-bootstrap
        • /g: 全局替换(虽然一行只有一个 theme:,通常可省略)。
    • 解读: 这一步至关重要,它告诉 Hugo 使用哪个主题。骨架项目 config.yaml 里原本可能写的是主题的模块路径(如 theme: github.com/razonyang/hugo-theme-bootstrap)或者旧的主题名。这个命令将其改为直接使用 themes/ 目录下的主题文件夹名 hugo-theme-bootstrap
    • Windows 替代方案: Windows 默认命令行 (cmd.exe, PowerShell) 通常没有 sed。文档建议使用 xcopy .\themes\hugo-theme-bootstrap\exampleSite /E。这个命令会将主题自带的 exampleSite 目录下的所有内容(包括配置文件) 复制并覆盖到你的站点根目录。这通常不是最佳实践,因为它会覆盖你可能已有的配置。更推荐在 Windows 上使用 Git Bash 或 WSL 来运行 sed 命令,或者手动编辑 config.yaml 文件。
  5. rm go.mod go.sum:
    • 作用: 删除项目根目录下可能存在的 go.modgo.sum 文件(如果骨架项目之前是用 Hugo Modules 方式管理的)。
    • 解读: 这一步是为了避免与 Git 子模块方式产生冲突。Hugo Modules 使用 go.mod 管理依赖(包括主题),而这里我们明确使用 Git 子模块来管理主题,所以需要移除 Hugo Modules 的标志文件。
  6. hugo mod npm pack:
    • 作用: 这是一个特殊的 Hugo 命令,即使你使用子模块安装主题。它会检查主题(无论是通过模块还是子模块安装的),如果主题包含一个 package.json 文件(通常用于管理 CSS/JS 构建依赖),Hugo 会把这个文件复制(或“打包”)到你的项目根目录下。
    • 解读: 主题可能需要 Node.js 工具(如 PostCSS, TailwindCSS, Webpack 等)来处理前端资源。这个命令确保你的项目根目录有主题所需的 package.json 文件,以便下一步安装依赖。
  7. npm install:
    • 作用: 读取项目根目录下的 package.json 文件(由上一步 hugo mod npm pack 提供),并安装里面定义的所有 Node.js 依赖包到 node_modules 目录。
    • 解读: 安装主题运行或构建其前端资源(CSS, JavaScript)所必需的 npm 包。这是让主题样式和功能正常工作的关键步骤。
  8. hugo server:
    • 作用: 启动 Hugo 的本地开发服务器。通常默认在 http://localhost:1313 运行。你可以访问这个 URL 来预览你的站点。
    • 解读: 完成所有配置和依赖安装后,启动服务器验证主题是否安装成功。

方法二:在现有站点上安装 (Install on an existing site)

此方法适用于你已经有一个 Hugo 站点,现在想给这个站点添加 hugo-theme-bootstrap 主题。

  1. cd myblog:
    • 作用: 进入你已有的 Hugo 站点的根目录。
  2. git submodule add ...:
    • 作用: 同上(方法一第3步)。在你的现有站点中添加主题作为子模块到 themes/hugo-theme-bootstrap
  3. git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton:
    • 作用: 将主题的骨架项目克隆到系统的临时目录(如 Linux/macOS 的 /tmp/hbs-skeleton)。
    • 解读: 目的是获取主题作者推荐的配置示例 (config)、示例内容 (content)、原型 (archetypes)、静态文件 (static) 和资源 (assets)。我们不直接克隆到项目里,而是先放到临时位置,然后选择性地复制需要的部分到现有站点。
  4. mkdir config:
    • 作用: 在你的站点根目录下创建 config 文件夹(如果它还不存在)。Hugo 使用这个目录存放配置文件。
  5. cp -a /tmp/hbs-skeleton/config/* ./config:
    • 作用: 将临时目录中骨架项目的 config 文件夹下的所有内容(-a 选项通常保留权限和递归复制) 复制到你站点的 config 目录下。
    • 解读: 警告: 这会覆盖你现有站点 config 目录下的同名文件!请确保你已备份或愿意覆盖你的配置。目的是快速应用主题所需的标准配置。如果已有复杂配置,你可能需要手动合并。
  6. cp -r /tmp/hbs-skeleton/content/* ./content:
    • 作用: 递归复制骨架的示例 content 文件到你的 content 目录。
    • 解读: 警告: 同样会覆盖现有同名内容文件!通常是为了提供主题功能的演示内容(如主页布局、博客文章示例等)。你可以选择不复制,或复制后修改/删除。
  7. cp -r ... archetypes, cp -r ... static, cp -r ... assets:
    • 作用: 与第5、6步类似,分别将骨架中的原型模板 (archetypes)、静态文件 (static)、资源文件 (assets) 复制到你的站点对应目录。
    • 解读: 警告: 都存在覆盖风险!archetypes 提供创建新内容页的模板,static 存放图片、PDF 等不需要 Hugo 处理的文件,assets 存放需要 Hugo Pipes 处理的 SCSS/JS 等文件。复制这些可以快速获得主题所需的结构和资源。
  8. sed -i ... config/_default/config.yaml:
    • 作用: 同方法一第4步。确保 config.yaml 中正确设置了 theme: hugo-theme-bootstrap。即使你复制了骨架的 config,这步也通常需要执行以确保指向子模块目录。
  9. hugo mod npm pack:
    • 作用: 同方法一第6步。获取主题的 package.json
  10. npm install:
    • 作用: 同方法一第7步。安装主题的 Node.js 依赖。
  11. hugo server:
    • 作用: 同方法一第8步。启动本地服务器预览。

重要提示解读 (If you’re making a fresh clone...)

  • 场景: 假设你的站点仓库已经按上述方法配置好并推送到远程(如 GitHub)。当你在另一台机器上或者重新克隆 (git clone) 你的站点仓库时。
  • 问题: 默认的 git clone 不会自动下载 仓库中包含的子模块(即你的主题)。子模块信息(URL 和提交点)记录在父仓库的 .gitmodules 文件中,但代码本身在另一个独立的仓库里。
  • 解决方法 1: 克隆完成后,进入项目目录,运行 git submodule update --init --recursive。这个命令会读取 .gitmodules 文件,初始化子模块配置,并递归地克隆(或检出指定提交)所有子模块仓库。
  • 解决方法 2 (更便捷): 在最初克隆你的站点仓库时,就使用 git clone --recursive <repo> 命令。--recursive (或 --recurse-submodules) 选项告诉 Git 在克隆主仓库后,立即自动克隆并初始化所有子模块。这是推荐的做法,避免忘记更新子模块导致主题代码缺失,站点无法构建。

总结:

这篇文档详细说明了如何通过 Git 子模块方式安装 hugo-theme-bootstrap 主题,区分了从零开始建站和在已有站点安装两种场景。核心步骤包括:克隆骨架(新站点)或主题本身(子模块)、复制示例配置和内容(有覆盖风险)、修改配置文件指向主题、处理主题的 npm 依赖、最后启动服务器。文档特别强调了 Windows 下 sed 命令的替代方案和克隆包含子模块仓库后的必要操作 (git submodule updategit clone --recursive)。虽然文档提供了子模块方法,但其开篇明确推荐优先考虑更现代的 Hugo Modules 安装方式。

关于 Windows 用户的注意事项,替换的是以下命令

sed -i "s/theme:.*/theme: hugo-theme-bootstrap/g" config/_default/config.yaml

替换为:

xcopy .\themes\hugo-theme-bootstrap\exampleSite /E

详细解析:

1. 原命令的作用 (sed)

  • 功能:修改配置文件 config/_default/config.yaml
  • 具体操作:将文件中 theme: github.com/razonyang/hugo-theme-bootstrap 替换为 theme: hugo-theme-bootstrap
  • 目的:让 Hugo 使用子模块安装的主题(而非 Hugo 模块)

2. Windows 替代命令 (xcopy)

  • 命令xcopy .\themes\hugo-theme-bootstrap\exampleSite /E
  • 作用
    1. 将主题自带的 exampleSite 目录下的 所有内容(包括配置文件、内容、静态文件等)复制到当前站点根目录
    2. /E 参数表示递归复制所有子目录(包括空目录)
  • 效果
    • 直接覆盖站点的 config/_default/config.yaml 文件
    • 同时会覆盖其他目录(如 content, static 等),慎用!

3. **为什么需要替换?

  • Windows 原生命令行(CMD/PowerShell)不支持 sed 命令
  • xcopy 是 Windows 内置命令,无需安装额外工具

4. 更安全的替代方案(强烈推荐)

如果不想覆盖整个站点,建议使用以下方法:

  • 方法 1:手动修改配置文件
    用记事本打开 config/_default/config.yaml,将 theme: 的值改为 hugo-theme-bootstrap
  • 方法 2:使用 Git Bash/WSL
    在 Windows 安装 Git for Windows 后使用 Git Bash 执行原 sed 命令
  • 方法 3:PowerShell 专用命令
    (Get-Content config/_default/config.yaml) -replace 'theme:.*', 'theme: hugo-theme-bootstrap' | Set-Content config/_default/config.yaml

执行注意事项:

  1. xcopy 的风险
    会覆盖现有站点的配置文件(config.yaml)和示例内容,仅适用于全新站点

    如果站点已存在自定义配置,请勿使用此命令!
  2. 操作顺序
    必须在添加子模块后执行(否则 themes/hugo-theme-bootstrap 目录不存在)

  3. 验证结果
    执行后检查 config/_default/config.yaml 中是否包含:

    theme: hugo-theme-bootstrap

完整流程(Windows 安全版):

:: 1. 克隆骨架站点
git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton myblog
cd myblog

:: 2. 添加主题子模块
git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap

:: 3. 手动修改配置(安全!)
notepad config/_default/config.yaml
:: 在打开的记事本中将 theme: 的值改为 hugo-theme-bootstrap

:: 4. 继续后续步骤
del go.mod go.sum
hugo mod npm pack
npm install
hugo server