尝试过 Hexo 、GatsbyJs、 Vuepress 搭建博客后,对这些工具最大的不满,就是运行速度以及打包速度。css
后来看到 Hugo ,号称最快的静态站点生成器后。html
尝试搭建博客,发现无论是运行速度,仍是打包速度超级快,果断将我的博客迁移到 Hugo。 Hugo 官方的定义是:git
Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again.(Hugo 是使用 Go 编写的快速而现代的静态站点生成器,旨在使网站建立变得有趣。)github
Hugo 搭建我的博客前,须要先安装 Git 和 Go 语言开发环境。golang
分别在 golang.org/dl/ 、git-scm.com/ 下载二进制安装包,点击默认设置安装便可。web
既可使用 HomeBrew 安装,也能够在 github.com/gohugoio/hu… 下载二进制包安装浏览器
brew install hugo
复制代码
在 github.com/gohugoio/hu… 下载二进制包安装bash
安装完成后,在命令行输入如下命令验证安装:markdown
hugo version
复制代码
输出版本信息表示安装成功,更多安装方式查看 gohugo.io/getting-sta…工具
一个 Hugo 项目就是一个站点,建立命令以下:
hugo new site [project-name]
复制代码
例如个人站点名称是 blog,建立命令以下:
hugo new site blog
复制代码
建立完成后,在 blog 文件夹下会生成如下文件结构:
.
├── archetypes # 存放生成博客的模版
├── assets # 存放被 Hugo Pipes 处理的文件
├── config # 存放 hugo 配置文件 支持 JSON YAML TOML 三种格式配置文件
├── content # 存放 markdown 文件
├── data # 存放 Hugo 处理的数据
├── layouts # 存放布局文件
├── static # 存放静态文件 图片 CSS JS文件
└── themes # 存放主题
复制代码
为了快速搭建博客,可使用主题。使用主题后,只须要向 content 文件夹添加 Markdown 文件便可。
Hugo 有主题市场 themes.gohugo.io/ ,挑选了半天,选出了两个自认为好看的主题:
第一个更好看、功能更增强大,选择了第一个。进入根目录,克隆主题文件就是安装主题。
cd blog
git clone https://github.com/olOwOlo/hugo-theme-even themes/even
复制代码
进入 blog/themes/even/exampleSite 文件夹,将 config.tom 文件拷贝到项目根目录下,同时将 blog/themes/even/exampleSite/content 文件夹覆盖掉根目录下的 content 。
命令行输入如下命令,启动 Hugo :
hugo server
复制代码
在浏览器打开 http://localhost:1313/
便可查看效果。
为了我的使用,须要修改 config.tom 文件,根听说明修改配置便可。
进入 blog/themes/even 文件夹,会发现文件结构与新建的 Hugo 项目的文件结构几乎是同样的。这样设置是为了用户的配置能够覆盖掉主题的配置。
好比我要自定义底部的显示,hugo-theme-even 底部配置由 blog/themes/even/layouts/partials/footer.html 控制。
为了覆盖掉主题的配置,在项目根目录下新建 blog/layouts/partials/footer.html 文件,填入自定义内容便可覆盖掉主题配置。其余文件的覆盖是同样的。
hugo-theme-even 使用了 Webpack 打包 js,css,而且文件名加入 hash 值,这种 css,js 是没法覆盖的,不过 hugo-theme-even 配置中有覆盖这种 css,js 的参数,详情参考个人文件配置。
添加新博客命令比较简单,命令以下:
hugo new post/my-first-blog.md
复制代码
这个命令会使用模板建立文件,首先查找用户的模板文件,没有就会查找主题的模板文件。
hugo-theme-even 的模版文件 blog/themes/even/archetypes/default.md 比较复杂,新建 blog/archetypes/default.md 文件覆盖掉便可。
个人模板配置以下:
---
title: "{{ replace .TranslationBaseName "-" " " | title }}"
date: {{ .Date }}
description: ""
draft: true
tags: []
categories: []
---
<!--more-->
复制代码
draft 参数控制网站上该页面是否显示。设置为 false 或者去掉该参数才显示。<!--more-->
以前的内容会自动做为页面摘要。
为了部署到线上,须要将 Markdown 文件打包成 HTML 文件。打包命令以下,even 是主题名:
hugo -t even
复制代码
打包以后就是纯 HTML 文件,理论上全部支持部署静态页面的网站都是支持的。
个人部署命令以下,更多部署方式查看 gohugo.io/hosting-and…
#!/bin/bash
# 部署到 github pages 脚本
# 错误时终止脚本
set -e
# 删除打包文件夹
rm -rf public
# 打包。even 是主题
hugo -t even # if using a theme, replace with `hugo -t <YOURTHEME>`
# 进入打包文件夹
cd public
# Add changes to git.
git init
git add -A
# Commit changes.
msg="building site `date`"
if [ $# -eq 1 ]
then msg="$1"
fi
git commit -m "$msg"
# 推送到githu
# nusr.github.io 只能使用 master分支
git push -f git@github.com:nusr/nusr.github.io.git master
# 回到原文件夹
cd ..
复制代码
博客文件存放地址 github.com/nusr/blog
文章首发 nusr.github.io/