将博客从 Hexo 迁移到 Hugo

Posted by Luffyao on Sunday, September 6, 2020

前言

之前博客是使用 Hexo,但是最近接触了 Hugo, 然后对比了下,感觉 Hugo 性能好很多,然后就学习了下 Hugo,将自己的博客迁移到了 Hugo 上了。这篇主要总结下这个过程中的步骤。

安装 Hugo

Hugo 官网下载 下载符合系统的最新版本,这里我们下载 hugo_xxx_Linux-64bit.deb

sudo dpkg -i hugo_xxx_Linux-64bit.deb  
sudo apt install -f

Hugo 使用

生成站点

使用下面命令生成站点:

hugo new site /path/to/site

创建文章

使用下面命令创建一编文章:

hugo new post/first.md

导入 Hexo 的文章

这里我是直接将 Hexo 里面的博客文章直接复制到了 Hugo 下面,然后做了下格式的修改。比如什么时间格式什么的。基本上不用修改什么,直接迁移就好了。

安装主题

这里我是安装的 hugo-theme-cleanwhite 主题:可以参考下面命令安装:

mkdir test
cd test
mkdir themes
cd themes
git clone https://github.com/zhaohuabing/hugo-theme-cleanwhite.git
cp -r hugo-theme-cleanwhite/exampleSite/** ../
cd ..
hugo serve

然后进行相关的修改

详细的使用方式可以参考 quick-start

运行 Hugo

当你编写好一篇文章后,可以通过执行 hugo server 在本地浏览器输入 http://localhost:1313 预览。

部署

假设你需要部署在 GitHub Pages 上,首先在 GitHub 上创建一个 Repository,命名为:luffyao.github.io luffyao 替换为你的 github 用户名)。 然后在 config.toml 文件中修改对应的 URL 到你自己的即可。

然后在执行 hugo 命令生成相应的静态页面。如果一切顺利,所有静态页面都会生成到 public 目录,将 pubilc 目录里所有文件 push 到刚创建的 Repository 的 master 分支。

可以参考下面命令进行提交:(这里需要注意一点的是要在 public 目录下进行git init)

hugo
cd public
git init  #first time need this command
git remote add origin https://github.com/luffyao/luffyao.github.io.git
git add -A
git commit -m "first commit"
git push -u origin master

最后就可以在浏览器里访问:http://luffyao.github.io/

高亮代码

themes/cleanwhite/layouts/_default/baseof.html 文件中添加下面这部分代码

<link rel="stylesheet"
      href="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/styles/vs.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

这里可供参考:

<!DOCTYPE html>
<html lang="{{ .Site.LanguageCode }}">
{{ partial "head.html" . }}
{{ partial "nav.html" . }}
<!-- Page Header -->
{{ block "header" .}}
<header class="intro-header" style="background-image: url('{{ .Site.Params.header_image | relURL }}')">
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1 ">
                <div class="site-heading">
                    <h1>{{ .Site.Title}} </h1>
                    <!--<hr class="small">-->
		    <span class="subheading">{{ .Site.Params.slogan }}</span>
                </div>
            </div>
        </div>
    </div>
</header>
{{ end }}

<link rel="stylesheet"
      href="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/styles/vs.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@10.1.2/build/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

{{ block "main" . }}
{{ end }}

{{ partial "footer.html" . }}
</body>
</html>

添加 CNAME

如果你购买过自己的域名,则这里可以在 public 目录下添加一个 CNAME 文件,并将自己的域名添加进去即可。这样你就可以通过自己的域名访问到博客了。

添加字数统计和阅读时间

  1. themes/layouts/partials/head.html 文件中引入不蒜子 js 文件

    {{ if .Site.Params.busuanzi }}
    <script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>
    {{ end }}
    
  2. themes/layouts/_default/single.html 中添加以下代码

    {{ if .Site.Params.busuanzi }}
    <h5 id="wc" style="font-size: 2rem;text-align: right;">本文共 {{ .FuzzyWordCount }} 字|阅读大约 {{ .ReadingTime }} 分钟|总阅读量<span id="busuanzi_value_page_pv"></span>次</h5>
    {{ end }}
    

    这里我是添加的 header 中的。具体可参考下面代码:

    <span class="meta">
        Posted by 
        {{ if .Params.author }}
            {{ .Params.author }}
        {{ else }}
                {{ .Site.Title }}
        {{ end }} 
        on 
        {{ .Date.Format "Monday, January 2, 2006" }}
        {{ if .Site.Params.page_view_conter }}
            {{ partial "page_view_counter.html" . }}
        {{ end }}
        <!-- Don't show "Last Modified on" if update happened on the same day. -->
        {{ if (and (not .Lastmod.IsZero) (not (eq (dateFormat "2006-01-02" .Lastmod) (dateFormat "2006-01-02" .Date)))) }}
        <br>Last Modified on {{ dateFormat "Monday, January 2, 2006" .Params.LastMod }}
        {{ end }}
        {{ if .Site.Params.busuanzi }}
        <h5 id="wc" style="font-size: 2rem;text-align: right;">本文共 {{ .FuzzyWordCount }} 字|阅读大约 {{ .ReadingTime }} 分钟|总阅读量<span id="busuanzi_value_page_pv"></span>次</h5>
        {{ end }}
    </span>
    
  3. config.toml 文件中添加 busuanzi=true

    [params]
      #字数统计
      busuanzi = true
    

CDN 引用

使用 Cloudinary 存储图片,加快访问速度。

参考