Hugo博客基础

标签: 无 分类: 未分类 创建时间:2023-07-19 09:57:49 更新时间:2025-01-17 10:39:22

1.前言

早些年的博客是使用的Hexo搭建的,从2019年开始,到现在已经四年多了,积累了很多的东西,有几百篇了,使用hexo每次生成都显得特别特别的慢,虽然借助了 AzureDevops 自动部署工具,但是如果有一个更快的博客生成系统,也不是不可以尝试下。我最近看到了Hugo,发现Hugo的star数量已经到了68k了,而Hexo只有37k,看来Hugo更加的火爆。原先的Hexo主题使用的是 nunjucks 模版写的,现在要重新进行开发了。

参考文章:
1.Hugo中文文档
2.Quick start
3.使用 Hugo 从 0 到 1 搭建个人博客 这里主要是有了一些其他的内容,比如配置github等。

2.安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 安装
brew install hugo

# 创建站点
hugo new site sitename

# 生成主题脚手架
hugo new theme achuanxiong

# 或者是谁直接添加已有的主题
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke

# 指定主题
echo "theme = 'ananke'" >> hugo.toml

# 开发
hugo server
# or
hugo server -D

# 创建文章
hugo new site /path/to/site

# 生成站点
hugo

3.目录结构

  • config.toml

    是网站的配置文件,Hugo还可使用 config.yaml 或者 config.json 进行配置。

  • content
    目录中存放所有的网站内容,可在此目录中建立其他子目录,即为子模块。

  • layouts
    目录存放 .html 格式的模板。模板确定了静态网站渲染的样式。此目录存储.html文件作为布局模板,这些模板声明了内容视图在静态站点的呈现。包含的模板有[列表页lists], 您的 [主页homepage], [标签模板taxonomy templates], [部分页面模板 partials], [单独页模板singles]

  • themes
    目录存放网站使用的theme主题模板。

  • static
    目录存放未来网站使用的静态内容,比如图片、css、JavaScript等。当Hugo生成静态网站时,该目录中的所有内容会原封不动的被复制。

  • archetypes
    目录存放网站预设置的文件模板头部,当使用 hugo new 时即可生成一个带有该头部的实例。

  • data
    目录用来存储Hugo生成网站时应用的配置文件。配置文件可以是YAML,JSON或者TOML格式。

  • public
    目录存放静态网页的代码,也就是生成的 html 文件;使用命令 hugo 会得到这个目录

4.基础知识

5.Hugo模块

(1)模块安装
因为我首次使用go开发,所以对于这个模块这个东西还不是很理解,就像 wowchemy 的主题,还是有这个 go.mod 模块的内容。后来我发现,很多的主题下面都有这个 go.mod 文件,应该是一个 go 模块。

我于是就去官方下载 了 pkg 的安装包,直接双击安装了。

安装了 go 开发环境之后,就可以使用 go modules 了。比如到 theme/wowchemy 下进行模块的下载

1
2
3
4
5
6
7
8
# 创建目录滚里模块
hugo mod vendor
# 更新所有模块
hugo mod get -u
# 清理缓存
hugo mod clean
# 打印依赖图
hugo mod graph
参考文章:
1.Hugo 模块
2.go module 使用 要启用go module支持首先要设置环境变量GO111MODULE,通过它可以开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是auto。
3.MacOS 使用Homebrew 安装go 这里使用的是 brew 进行 go 环境的安装。
4.如何使用Go模块 当你用go 工具运行命令时,go.mod 文件是一个非常重要的部分。它是包含模块名称和你自己模块所依赖的其他模块的版本的文件。它还可以包含其他指令,如 replace,这对于同时进行多个模块的开发很有帮助。
5.Go Modules 详解使用 从 Go 1.13 开始,模块模式将成为默认模式。
6. hugo-theme-stack-starter You need to install Git, Go and Hugo extended locally.
7.如何使用go module导入本地包
8.hugo mod
9.Hugo 不完美教程 - III: Hugo Modules 模块 使用专用的供应目录来存储 Modules,以下命令会将依赖模块放到 _vendor 目录下管理,对后面的构建生效:

(2)代理配置
在主题的 config.yaml 配置文件中,进行代理配置,这样下载就快一点了。 这里还存在疑问。

1
2
3
4
5
6
7
8
9
module:
hugoVersion:
min: '0.101.0'
extended: true
imports:
- path: github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemy-core
- path: github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemy-seo
# 阿里云
proxy: https://mirrors.aliyun.com/goproxy/
参考文章:
1.Hugo Module 代理 后来搜索了下才知道,Hugo 遵循 HUGO_MODULE_PROXY 环境变量,而非 GOPROXY,除此之外还可以在配置文件中指定代理服务器
2.Go 和 Hugo 代理服务器 GOPROXY.IO、阿里云、腾讯云。设置 Go 模块代理服务器,设置 Hugo 模块代理服务器

问题

(1) failed to download modules: binary with name “go” not found

【解决方案】
就是安装 go 开发环境。

5.配置 wowchemy 主题

在 Hugo 的主题列表中,wowchemy 主题是排在第一个的,于是我想着要把这个尝试下。我只需要一个主题,于是我就直接从 ,把这个 modules/wowchemy 模块拷贝到了我自己的站点目录下。

配置 wowcheny 主题也废了一番功夫。

(1) 下载
wowchemy 仓库中,将主题下载到临时文件夹中。

(2) 拷贝
打开下载的仓库,将 modules/wowchemy 文件拷贝到站点的 themes 文件夹下。

(3) 修改主题配置
修改 wowchemy 的config.yaml 文件,在 module 模块下增加 proxy 代理。

1
2
3
4
5
6
7
8
9
module:
hugoVersion:
min: '0.101.0'
extended: true
imports:
- path: github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemy-core
- path: github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemy-seo
# 阿里云
proxy: https://mirrors.aliyun.com/goproxy/

(3) 安装模块
进入到站点的 themes 文件夹,执行模块安装,

1
2
3
4
# 进入主题目录,生成模块文件夹
hugo mod vendor
# 更新模块
hugo mod get -u

(4) 增加配置文件
我在网站的根目录下新建了 config/_default,在其中创建了 config.yaml 文件,添加如下内容:

1
2
3
4
5
security:
funcs:
getenv:
- ^HUGO_
- ^WC_

(5) 启动
修改 hugo.toml 文件,指定主题

1
theme = "wowchemy"

启动站点

1
hugo serve -D 

问题

1.module does not exist
在有 go.mod 文件的主题中,运行 hugo server ,结果就会报错。

【解决方案】

1
2
3
4
# 进入主题目录,生成模块文件夹
hugo mod vendor
# 更新模块
hugo mod get -u
参考文章:
1.“Module not Found…” 这里是一个讨论,但是我没有找到合适的信息。
2.Error: module not found?

2.dial tcp 172.217.163.49:443: i/o timeout
在解决上面的问题的时候,我遇到的问题,我在主题目录下运行 “go get .” 结果就报错了。

【解决方案】

1
2
## 设置国内的地址
go env -w GOPROXY=https://goproxy.cn

3.error calling getenv: access denied: “WC_POST_CSS” is not whitelisted in policy “security.funcs.getenv”; the current security configuration is
当我解决了上面的两个问题之后,再次进行开发,结果出现了这个问题。

【尝试】
我在根目录下新建了 config.yaml 文件,似乎不起作用。

【解决方案】
我在网站的根目录下新建了 config/_default,在其中创建了 config.yaml 文件,添加如下内容:

1
2
3
4
5
security:
funcs:
getenv:
- ^HUGO_
- ^WC_

也可以尝试在主配置文件 config.toml 文件中填写:

1
2
[security.funcs]
getenv = [ "^HUGO_", "^WC_" ]
参考文章:
1.Problem when compiling templates with Hugo (access denied: “WC_POST_CSS” is not whitelisted in policy “security.funcs.getenv”) 这里是第一个文章。
2.Breaking changes in Hugo 0.91.0 If you want to help test the breaking changes required for the new Hugo version, Hugo 0.91, it’s looking like Hugo is asking you to add the following to your config.yaml:
3.blogdown::serve_site() fails to produce template site The config file is config/_default/config.yaml in your website project
4.Fail to build wowchemy pages In case it helps somebody, I had missing the following section from my main config.toml file

6.Hugo extended

在查询资料的时候,有时候会有这个 Hugo extended 的资料,就是在使用 scss/sass 的时候,需要这个东西,但是我没有在官网上找到这个独立的安装方法,不知道是不是过期了。

(1)可以到 官方 v0.115.3 这个 0.115.3 版本的 Assets 里面有这个 hugo-extentded 的安装包,下载后替换原先的hugo安装包的可执行文件,进行替换。

(2) MacOS 使用brew 进行安装,默认的就是 extended 版本。

1
2
3
4
5
6
# 安装
brew install hugo
# 查看
hugo version
# 显示
hugo v0.115.3+extended darwin/amd64 BuildDate=unknown
参考文章:
1.Should I use Hugo extended for a new Hugo Project? 这里有一个讨论就是要不要使用 extend,但是已经很久了。
2.hugo-extended
3.hugo-extended安装使用 (1) 下载extended版本到服务器。(2)服务器解压后,会得到一个叫hugo的可执行文件 。(3) 将解压出来的hugo替换掉原来的,然后在博客的站点目录下执行命令后台启动。
5.Hugo 安装指定版本 有个要注意的小问题是 MacOS 使用 homebrew 安装的话默认会安装 extended 版本

7.自定义主题

自定义主题,其实有两种方式,第一种就是完全从零开始开发,另外一种就是先克隆别人的主题,然后在别人的主题上进行二次开发,调整。

1
2
3
hugo new site achuanxiong  # 创建网站骨架
cd study-hugo
hugo new theme achuanxiong # 创建主题目录
参考文章:
1.自定义hugo主题–从内容页开始
2.Why my single page in Hugo returns a 404 HTTP error?
3.如何创建自己的hugo主题 这篇文章讲了自定义主题需要的一些基础知识。
4.转向 Hugo:主题制作指北 这篇文章讲了很多模版语法,还提供了从hexo转向hugo的一些正在表达式。
5.Hugo添加自定义css和javascript
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。