尝试过 Hexo 、GatsbyJs、 Vuepress 搭建博客后,对这些工具最大的不满,就是运行速度以及打包速度。

后来看到 Hugo ,号称最快的静态站点生成器后。

尝试搭建博客,发现不管是运行速度,还是打包速度超级快,果断将个人博客迁移到 Hugo。

Hugo 官方的定义是:

Hugo is a fast and modern static site generator written in Go, and designed to make website creation fun again.(Hugo 是使用 Go 编写的快速而现代的静态站点生成器,旨在使网站创建变得有趣。)

安装 Hugo

Hugo 搭建个人博客前,需要先安装 Git 和 Go 语言开发环境。

分别在 https://golang.org/dl/http://git-scm.com/ 下载二进制安装包,点击默认设置安装即可。

Mac 安装 Hugo

既可以使用 HomeBrew 安装,也可以在 https://github.com/gohugoio/hugo/releases 下载二进制包安装

  1. brew install hugo

Windows 安装 Hugo

https://github.com/gohugoio/hugo/releases 下载二进制包安装

安装完成后,在命令行输入以下命令验证安装:

  1. hugo version

输出版本信息表示安装成功,更多安装方式查看 https://gohugo.io/getting-started/installing

建立 Hugo 项目

一个 Hugo 项目就是一个站点,创建命令如下:

  1. hugo new site [project-name]

例如我的站点名称是 blog,创建命令如下:

  1. hugo new site blog

创建完成后,在 blog 文件夹下会生成以下文件结构:

  1. .
  2. ├── archetypes # 存放生成博客的模版
  3. ├── assets # 存放被 Hugo Pipes 处理的文件
  4. ├── config # 存放 hugo 配置文件 支持 JSON YAML TOML 三种格式配置文件
  5. ├── content # 存放 markdown 文件
  6. ├── data # 存放 Hugo 处理的数据
  7. ├── layouts # 存放布局文件
  8. ├── static # 存放静态文件 图片 CSS JS文件
  9. └── themes # 存放主题

添加主题

为了快速搭建博客,可以使用主题。使用主题后,只需要向 content 文件夹添加 Markdown 文件即可。

Hugo 有主题市场 https://themes.gohugo.io/ ,挑选了半天,选出了两个自认为好看的主题:

  1. https://github.com/olOwOlo/hugo-theme-even
  2. https://github.com/yoshiharuyamashita/blackburn

第一个更好看、功能更加强大,选择了第一个。进入根目录,克隆主题文件就是安装主题。

  1. cd blog
  2. git clone https://github.com/olOwOlo/hugo-theme-even themes/even

启动 Hugo

进入 blog/themes/even/exampleSite 文件夹,将 config.tom 文件拷贝到项目根目录下,同时将 blog/themes/even/exampleSite/content 文件夹覆盖掉根目录下的 content

命令行输入以下命令,启动 Hugo :

  1. 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 的参数,详情参考我的文件配置。

添加新博客

添加新博客命令比较简单,命令如下:

  1. hugo new post/my-first-blog.md

这个命令会使用模板创建文件,首先查找用户的模板文件,没有就会查找主题的模板文件。

hugo-theme-even 的模版文件 blog/themes/even/archetypes/default.md 比较复杂,新建 blog/archetypes/default.md 文件覆盖掉即可。

我的模板配置如下:


  1. ---
  2. title: "{{ replace .TranslationBaseName "-" " " | title }}"
  3. date: {{ .Date }}
  4. description: ""
  5. draft: true
  6. tags: []
  7. categories: []
  8. ---
  9. <!--more-->

draft 参数控制网站上该页面是否显示。设置为 false 或者去掉该参数才显示。<!--more--> 之前的内容会自动作为页面摘要。

打包

为了部署到线上,需要将 Markdown 文件打包成 HTML 文件。打包命令如下,even 是主题名:

  1. hugo -t even

部署到 Github Pages

打包之后就是纯 HTML 文件,理论上所有支持部署静态页面的网站都是支持的。

我的部署命令如下,更多部署方式查看 https://gohugo.io/hosting-and-deployment/

  1. #!/bin/bash
  2. # 部署到 github pages 脚本
  3. # 错误时终止脚本
  4. set -e
  5. # 删除打包文件夹
  6. rm -rf public
  7. # 打包。even 是主题
  8. hugo -t even # if using a theme, replace with `hugo -t <YOURTHEME>`
  9. # 进入打包文件夹
  10. cd public
  11. # Add changes to git.
  12. git init
  13. git add -A
  14. # Commit changes.
  15. msg="building site `date`"
  16. if [ $# -eq 1 ]
  17. then msg="$1"
  18. fi
  19. git commit -m "$msg"
  20. # 推送到githu
  21. # nusr.github.io 只能使用 master分支
  22. git push -f git@github.com:nusr/nusr.github.io.git master
  23. # 回到原文件夹
  24. cd ..

代码

博客文件存放地址 https://github.com/nusr/blog

文章首发 https://nusr.github.io/

Hugo + Github Pages 搭建个人博客的更多相关文章

  1. 【一】Ubuntu14.04+Jekyll+Github Pages搭建静态博客

    本系列有五篇:分别是 [一]Ubuntu14.04+Jekyll+Github Pages搭建静态博客:主要是安装方面 [二]jekyll 的使用 :主要是jekyll的配置 [三]Markdown+ ...

  2. 基于 Hexo + GitHub Pages 搭建个人博客(二)

    在 基于 Hexo + GitHub Pages 搭建个人博客(一) 这篇文章中,我们已经知道如何使用 Hexo + GitHub Pages 搭建一个个人博客,GitHub 为我们提供了免费的域名和 ...

  3. 基于 Hexo + GitHub Pages 搭建个人博客(三)

    一.添加扫描二维码关注功能 打开 themes 目录下的 next 主题配置文件,找到 Wechat Subscriber 标签,将该标签下的配置改成如下形式: # Wechat Subscriber ...

  4. 使用github pages搭建个人博客

    一.环境准备 使用Github Pages搭建个人博客,一劳永逸,可以让我们更加专注于博客的撰写.博客的更新是通过将新建或改动的博客放在指定文件夹并推送到远程Github仓库来完成的,所以我们本地需要 ...

  5. 使用Hexo + GitHub Pages 搭建个人博客

    一.前言 之前是在CSDN上写博客的,但是无奈其广告满天飞,还有因为个人不太喜欢CSDN博客里的一些东西,加上看到很多技术大牛都有自己的个人博客,于是乎!便想着搭建一个自己的个人博客.其实之前写博客还 ...

  6. 基于 Hexo + GitHub Pages 搭建个人博客(一)

    前言:我的博客写作之路 15 年刚上大学,第一次接触公众号,就萌生了创建一个公众号写点东西,但最终不了了之. 很快到了 16 年,开始接触网上各大博客网站,接触最多的当属 CSDN,萌生了注册一个博客 ...

  7. Hexo + Github Pages 搭建个人博客

    之前一直想搭建自己的博客,由于自己的懒惰拖到现在.好了,废话不多说!直接上干货! 安装Node.js 安装Git Github Pages配置 安装Hexo及主题设置 进阶篇-高级定制 其它实用功能 ...

  8. 使用 jekyll + github pages 搭建个人博客

    1. 新建 github.io 项目 其实 github pages 有两个用途,大家可以在官方网页看到.其中一个是作为个人/组织的主页(每个账号只能有一个),另一个是作为 github 项目的项目主 ...

  9. 基于Hexo+Github Pages搭建的博客

    概念 Github Pages可以被认为是用户编写的.托管在github上的静态网页.使用Github Pages可以为你提供一个免费的服务器,免去了自己搭建服务器和写数据库的麻烦.此外还可以绑定自己 ...

随机推荐

  1. scala函数

    1.probablePrime(6,Random) Random是scala.util._中的包 probablePrime是scala.math.BigInt._伴生对象中的方法: probable ...

  2. 快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC、EntityFrameWork、T4模板技术。

    快速开发框架,及库存管理系统,基于easyui框架和C#语言MVC.EntityFrameWork.T4模板技术. 产品界面如下图所示: 源码结构: 开放全部源码,如有需要请联系,QQ:1107141 ...

  3. 如何使用Sencha touch 构建基于Cordova的安卓项目

     项目构建篇 1.生成sencha touch 项目 新建目录,在命令行进入该目录,sencha -sdk sdk-path generate app appName appPath 2.命令行中进入 ...

  4. Java构造器:级联调用,调用兄弟构造器

    级联调用: class Father{ Father(){ System.out.println("Father birth"); } public void announce() ...

  5. SSM博客 前端页面样式不显示

    <!-- 由于在web.xml中定义的url拦截形式为“/”表示拦截所有的url请求, 包括静态资源例如css.js等.所以需要在springmvc.xml中添加资源映射标 --> < ...

  6. 连接Access数据遇到的问题总览!

    由于要访问一个厂商的access数据,所以要写一个对于access的demo,相对于mysql.sqlserver来说,连接access花费了不少精力,现在将遇到的问题分享出来,以后大家遇到类似问题时 ...

  7. linux基础和vim基本使用

    Liunx基础 1. 目录  /:根目录,一般根目录只存放目录,在linux下有且只有一个根目录.所有的东西都是从这里开始,例如:/home就是先从根目录/开始,再进入到home目录.  /bin ...

  8. 微信小程序开发库grace vs wepy

    grace和wepy都是辅助小程序开发的开源库,本文对两者做个对比. 注:本文是作者本人的一些拙见,纯粹的技术讨论,不想引起技术信仰之争,欢迎积极.正向的讨论及建议. 如果你还不了解Grace, 请参 ...

  9. mybatis查询异常-Error querying database. Cause: java.lang.ClassCastException: org.apache.ibatis.executor.ExecutionPlaceholder cannot be cast to java.util.List

    背景,mybatis查询的时候直接取的sqlsession,没有包装成SqlSessionTemplate,没有走spring提供的代理. 然后我写的获取sqlsession的代码没有考虑到并发的情况 ...

  10. Unity3D学习(一):简单梳理下Unity跨平台的机制原理

    前言 首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的. 什么是Mono? 参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel ...