Hugo博客安装教程,评论系统,自定义js Css,代码高亮
一、Hugo介绍、安装
盘点一下当下流行的博客框架,当极客们想生成搭建自己的网站时,有这些选择
WordPress,强大,不仅可以搭建博客,还能搭建商城等,后台为PHP
Hexo 基于node.js的静态博客框架
Jekyll 静态博客框架
Hugo 基于go语言的静态博客框架,号称是世界上最快的网页构件框架
前面两者的生态可能会更庞大丰富,但是Hugo更方便更快,越来越多的人转到Hugo,相信Hugo是未来。
GitHub搜索hexo theme和hugo theme,前者的项目和star基本上是后者的两倍,求稳的可以先观望。
1.1 hugo安装
不要看官网,直接从GitHub上下载,展开所有assets,下载windows-amd64.zip
,下载后就能在当前文件夹打开cmd或powershell运行了。想要任意位置都能运行就添加到环境变量。
二、快速开始
2.1 创建网站
进入目标文件夹,运行hugo new site [项目名]
会建立一个名为[项目名]的文件夹,里面是初始化的文件,让我们来认识一下
.
├── archetypes
├── content # 文章md文件存放目录
├── public # 输出目录,存放渲染好后的网页文件
├── static # 静态资源,存放要引用的图片、js等,部署后能直接从网站根目录访问这里面的资源
├── themes # 主题
└── config.toml # 核心配置文件
如果使用git的话,public添加到.gitignore,而主题则使用submodule
2.2 创建文章
运行`hugo new posts/[文件名].md
创建的文件在content/posts
下,所有文章都放这个目录下,content目录下无需创建其它文件夹,而posts目录下也无需子文件夹,识别不到的
文件名就是后续访问的url,建议是小写英文,用 - 代替空格,当然用中文也可以。设定以后,被搜索引擎收录后,尽量不要修改文件名。
hugo new
命令和直接创建md文件的区别就是,命令创建的有模板内容
我们发现新的文章中有这种内容
---
title: ""
date: 2022-10-12T16:33:35+08:00
draft: true
---
文章头部的这些信息在渲染网站时需要用到,具体含义以后再说。
2.3 下载主题
没有主题那么构建出来public文件中只有xml文件,没有网站html文件
选择主题,可以谷歌,而博主直接在GitHub中搜索,选一个star多,心仪的,下载
git submodule add https://github.com/dillonzq/LoveIt.git themes/LoveIt
配置主题,打开config.toml,确保theme = 'LoveIt'
,配置文件我们后面详说
2.4 构建网站
将渲染后的网站文件输出public,运行
hugo --buildFuture --buildDrafts
使用的环境变量是production,这样就能拿public目录中的文件去服务器上部署了
而博主推荐调试时,直接在本地生成web服务,浏览器可访问
hugo server --buildFuture --buildDrafts
使用的环境变量是development,运行后结结果中有http://localhost:xxx
的链接,浏览器打开即可。程序运行在后台会监控文件的变化,自动更新网站页面
如果本地调试时,有的参数和生产时不一样,可以在config/development/config.toml
文件中单独设置这个变量,会优先使用这个,比如
[params]
[params.page]
[params.page.library]
[params.page.library.js]
zCustomJS = "http://localhost:1313/js/custom.js"
两个参数分别是渲染date在未来的文章、渲染draft: true
的草稿文章。否则新建的文章默认是草稿,那就不会渲染,出现找不到文章的尴尬情况
三、Hugo配置
hugo支持多种格式的配置文件,toml、yaml、json
最好的是yaml,可以在配置中使用变量,无需输入重复的字符串
但是还是推荐toml,因为主题用的toml多,以及在网上找到的配置也是toml居多,可以直接复制粘贴
主题中也有一份配置文件,我们在根目录编辑会覆盖主题中的相同参数。一些主题独有的配置我们可以在根目录配置,不用去更改主题目录内的文件
3.1 config.toml配置
# 网站语言, 仅在这里 CN 大写 ["en", "zh-CN", "fr", "pl", ...]
languageCode = "zh-CN"
# 语言名称 ["English", "简体中文", "Français", "Polski", ...]
languageName = "简体中文"
# 是否包括中日韩文字
hasCJKLanguage = true
# 阅读全文、发布于等字体的语言
defaultContentLanguage = "zh-cn"
theme = 'LoveIt'
# 构建所有文章,包括草稿等
buildDrafts = true
buildExpired = true
buildFuture = true
enableEmoji = true
# 根据git信息自动为所有文章添加最后修改日期
enableGitInfo = true
[frontmatter]
lastmod = [':git', 'lastmod', ':fileModTime', ':default']
# 启用文章标签和分类
[taxonomies]
category = 'categories'
tag = 'tags'
# 允许渲染html标签
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
# 顶部右侧显示菜单
[menu]
[[menu.main]]
weight = 1
identifier = "posts"
# 你可以在名称 (允许 HTML 格式) 之前添加其他信息, 例如图标
pre = ""
# 你可以在名称 (允许 HTML 格式) 之后添加其他信息, 例如图标
post = ""
name = "文章"
url = "/posts/"
# 当你将鼠标悬停在此菜单链接上时, 将显示的标题
title = ""
[[menu.main]]
weight = 2
identifier = "tags"
pre = ""
post = ""
name = "标签"
url = "/tags/"
title = ""
[[menu.main]]
weight = 3
identifier = "categories"
pre = ""
post = ""
name = "分类"
url = "/categories/"
title = ""
其余的baseURL、title、作者信息等基本配置就不说了
修改网页的favicon图标只需文件名是favicon.ico
,放到static目录下即可。使用透明的png图片,谷歌搜索png转ico,尺寸为32即可
主题支持的话,要开启rss订阅,这就是网站地图,是一个xml文件,可以提交给搜索引擎收录
3.2 评论系统
由于我们是静态页面,没有后台,想做评论系统就得借助第三方应用
国内的就不介绍了
utteranc 是基于GitHub issues的评论系统,无广告,评论起来需要先登录GitHub
disqus 是国外最大的第三方评论平台,数据应该是在他们的数据库上。有广告,使用起来需要登录,可以选择谷歌、推特、disqus等登录方式
cusdis 如果觉得GitHub issues不好管理评论,disqus加载慢且有广告,则cusdis是一个好选择,它是为了怼disqus而生的。用户无需登录即可评论,但是需要管理员同意才会展示
前两者在LoveIt主题中直接填写信息即可配置,cusdis未被支持,需要自己嵌入页面
3.3 搜索系统
同评论系统,我们只能用第三方应用来进行搜索
LoveIt支持配置第三方搜索,推荐algolia
需要先注册,创建index,接着在用户的settings - api keys
,获得app id
和Search-Only API Key
三个分别填入LoveIt主题配置即可
接着需要在algolia提交我们网站的内容,才能进行搜索
推荐使用hugo-algolia,在项目根目录创建config.yaml,其中的key填写Admin API Key。
3.4 代码高亮
highlightjs支持的语法更多,代码高亮更丰富
使用方法是
引入文件
<link rel="stylesheet"
href="//unpkg.com/@highlightjs/cdn-assets@11.6.0/styles/default.min.css">
<script src="//unpkg.com/@highlightjs/cdn-assets@11.6.0/highlight.min.js"></script>
运行渲染js
<script>hljs.highlightAll();</script>
3.5 自定义css和js
很遗憾,找遍全网,没有找到Hugo哪能引用自定义的css、js文件
目前来说只能曲线引用,比如LoveIt主题支持配置第三方库文件
params.page.library
可以引入网页链接或主题目录下assets目录中的文件
我们可以这样引入语法高亮的文件,css就会被放在页面head中,而js在body最后
我们还可以自己写js防止static目录下,再把本站的网页链接放入填入
第二个方法是,在填写页脚等处内容时,嵌入script标签
<script>
var customJS = document.createElement('script')
customJS.setAttribute('src', '/js/custom.js')
document.body.appendChild(customJS)
</script>
所有js写/js/custom.js
中即可
四、文章前置参数
文章开头的配置,可能包含LoveIt主题的特殊配置
---
title: "文章标题"
date: 创建时间,hugo new时自动生成
lastmod: 文章最后修改时间,如果配置了git lastmod,这里不用写
draft: 是否是草稿
categories: ["分类","配置了taxonomies才有效"]
tags: ["标签","同上"]
featuredImage: "文章内顶部图片的url"
featuredImagePreview: "主页显示文章时展示的图片"
summary: 文章摘要,重要!关乎ESO搜索引擎优化
---
负二、其它技巧
-2.1 cdn
我们网站的内容不必要全在自己服务器上,有些免费cdn可用
比如jQuery,可用谷歌jQuery cdn,直接引用,而不需要下载放到我们的服务器上
比如GitHub上的文件,可用查看raw格式的,然后使用https://raw.githubusercontent.com/
的url
或者使用jsdelivr,所有GitHub的文件都能通过修改url变成jsdelivr的cdn来访问,jsdelivr会自动对GitHub进行加速。不过最近(2022年10月13日)国内已有部分被墙
负一、遇到的问题
一个是LoveIt主题文章页面左侧留白太多了,能展示作者信息就好了
第二个是LoveIt主题评论不支持disqus
algolia url中的空格问题
文章的最后,感谢jsdelivr、cusdis、algolia等免费的平台,正是有了开放、分享和贡献精神,互联网才会美好。而那些什么建图床,逮住往死里薅的人,是环境的破坏者,是大家的公敌。比如jsdelivr,传闻它被墙了,但是 .js .svg等文件国内仍能流程访问,就是png这种不能访问,显然是开发者禁止中国访问大文件图片了