Hexo+Github搭建部落格總結

ztq發表於2018-08-11

本文永久連結:zhengtuqiang.pw/2018/07/31/…

1. 前言

本來今年年初的時候就已經搭建了部落格,當時看的是掘金裡面的一篇教程。但是其實那篇教程說的不是很好,遇到很多問題。直至最近又有了建設個人品牌的想法,遂繼續折騰個人部落格。在網上找了各種資料,後來發現Grok抱殘守缺的這篇教程Grok抱殘守缺的部落格不但令人知其然,也令人知其所然。跟著教程一次就成功了。我的這個總結總體是站在Grok抱殘守缺基礎上去寫的,作為補充。

2. 過程概覽

這個步驟就不重複造輪子了,跟著Grok抱殘守缺的這篇教程來即可。

  1. 安裝 Node js,Git。這兩個都是下載完之後直接安裝就可以了。
  2. Git 配置以及 Github 配置 SSH。
  3. 安裝 Hexo。
  4. Hexo 本地建站。
  5. 主題配置。本文以 Material-Flow 為例說明。
  6. 繫結獨立域名。

3. Material-Flow 主題配置

這是一個遵循安卓 Material Design 風格的主題,支援響應式,也就是說會根據當前是瀏覽器螢幕去自適應顯示,在手機端的顯示效果也不錯。我主要做了以下的修改:漢化關於頁面百度統計不蒜子閱讀量統計和一個彩蛋功能。這是我的定製版本

3.1 Material-Flow 主題概述

主題的檔案結構如下:

├─material-flow
│  ├─layout #ejs模板
│  │  ├─_partial 
│  │  └─_widget #側欄相關
│  ├─snapshots
│  └─source #字型、圖片、js資源
│      ├─fonts
│      ├─images
│      ├─js
│      └─less
複製程式碼

我們先來看一下 layout/layout.ejs,預設通過 hexo new <title> 會把 layout.ejs 作為模板生成 html 網頁。

<%- partial('_partial/head') %> <!-- header -->
<body>
  <%- partial('_partial/loading') %>
  <script>setLoadingBarProgress(20)</script> 
  <%- partial('_partial/header', null, {cache: !config.relative_link}) %>
    <script>setLoadingBarProgress(40);</script>
  <div class="l_body">
    <div class='container clearfix'>
      <div class='l_main'>
        <%- body %> <!-- 主體 -->
      </div>
      <aside class='l_side'>
        <%- partial('_partial/side') %> <!-- 側欄 -->
      </aside>
      <script>setLoadingBarProgress(60);</script>
    </div>
  </div>
  <%- partial('_partial/footer', null, {cache: !config.relative_link}) %> <!-- footer -->
  <script>setLoadingBarProgress(80);</script>
  <%- partial('_partial/scripts') %>
  <script>setLoadingBarProgress(100);</script>
</body>
</html>
複製程式碼

第10行 <%- body %>,這是 html 頁面的主體部分。一共有三個 menu 首頁文章關於,主體部分分別對應的是 layout/_partial/post.ejslayout/_partial/categories.ejslayout/_partial/article.ejs。注意具體的博文頁面中,主體部分也是 layout/_partial/article.ejs

3.2 漢化&時間修改

漢化的思路其實很簡單,hexo s 後檢視網頁,通過 FileLocationPro 工具搜尋一下主題資料夾中想漢化的內容,然後將其改為中文即可。例如我漢化了上一篇下一篇檢視更多以及瀏覽器頁籤的一些內容。 Material-Flow 的時間格式預設為 月 日,年 (MMM D, YYYY),我統一把時間格式改為 年/月/日 (YYYY/M/D)。

3.3 關於頁面

Material-Flow 主題預設只有兩個兩個 menu 首頁文章,我們可以在部落格新增一個 關於 menu。首先在主題的配置檔案中新增 關於 menu。

# navigation menu
menu:
  - name: 首頁
    slug: home
    url: /
  - name: 文章
    slug: archives
    url: /archives
  #新增關於
  - name: 關於 #menu名字
    slug: about #這是用於自動生成選中menu時,menu項高亮的css
    url: /about #url路徑
複製程式碼

然後在 cmd 命令中 hexo new page "about",此命令會在 source 資料夾下生成一個 about 資料夾,裡面的 index.md 就是 關於 menu 的主體內容,可以像寫一篇博文一樣寫自己的簡介。像我就在裡面加入了一個彩蛋。

3.4 百度統計

註冊一個百度統計賬號,然後新增自己博文的地址,拿到統計程式碼。 統計程式碼:

<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?你的百度統計id";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
複製程式碼

首先在 layout/_partial/head.ejs 中新增以下程式碼:

<script>
    function setLoadingBarProgress(num) {
      document.getElementById('loading-bar').style.width=num+"%";
    }
    <!-- 百度統計begin -->
  <% if(theme.tongji.baidu_id){ %>
  	var _hmt = _hmt || [];
    (function() {
       var hm = document.createElement("script");
       hm.src = "https://hm.baidu.com/hm.js?<%- theme.tongji.baidu_id %>";
       var s = document.getElementsByTagName("script")[0]; 
       s.parentNode.insertBefore(hm, s);
    })();
  <% } %>
  <!-- 百度統計end -->
  </script>
</head>
複製程式碼

然後在主題配置檔案 _config.yml 中新增以下程式碼:

tongji:
  baidu_id: #你的百度統計id
複製程式碼

以後百度統計 id 變更的話,直接替換掉 baidu_id 即可。

3.5 不蒜子閱讀量統計

百度統計有多項強大的分析功能,如流量分析,來源分析,訪問分析,轉化分析,訪客分析以及優化分析等。但是百度統計主要是給博主自己用的。對於訪客來說,我想讓他們也能看到此文章的受歡迎程度,需要在博文的底部展示閱讀量。我選擇的是不蒜子,號稱是兩行程式碼搞定計數。 因為我想要在頁面底部顯示閱讀量資訊,所以首先在 layout/_partial/footer.ejs 中新增以下程式碼:

<% if(theme.tongji.busuanzi){ %>
	<script async src="//dn-lbstatics.qbox.me/busuanzi/2.3/busuanzi.pure.mini.js">
</script>
	<% if(is_home()){ %>
	<span id="busuanzi_container_site_pv">
    本站總訪問量<span id="busuanzi_value_site_pv"></span>次
	</span>
	<span id="busuanzi_container_site_uv">
	本站訪客數<span id="busuanzi_value_site_uv"></span>人次
	</span>
	<% }else { %>
	<span id="busuanzi_container_page_pv">
	本文總閱讀量<span id="busuanzi_value_page_pv"></span>次
	</span>
	<% } %>
  <% } %>
複製程式碼

然後在主題配置檔案 _config.yml 中新增以下程式碼:

tongji:
  busuanzi: true #不蒜子開關
複製程式碼

因為不蒜子沒有id,所以只有一個表示開關的屬性。layout/_partial/footer.ejs 第1行 <% if(theme.tongji.busuanzi){ %> 會進行判斷。

3.6 <!-- more -->

這個標記要單獨拿出來說一下。在寫博文的時候,<!-- more --> 標記會把前面的內容生成摘要,也就是 post.excerpt 取到的內容。當初不知道如何實現「檢視更多」的功能,在這上裡浪費了不少時間。後來才知道用這個標記就可以實現了( ๑ŏ ﹏ ŏ๑ )。

4. ejs 的一些用法

在對 Material-Flow 做修改的時候是直接參照上下文的一些程式碼的,自己沒有系統瞭解過 ejs,所以記錄一些零散的用法。

4.1 javascript 混合 html

<% if (post.excerpt) { %>
	  <div class="readmore">
      <a href="<%- url_for(post.path) %>">點選檢視</a>
      </div>
    <% } %>
複製程式碼

javascript 語句用 <% %> 包起來,其中的 html 標籤不需要。輸出執行結果用<%- %>

4.2 javascript 讀取主題配置檔案 _config.yml 的形式

單值

tongji:
  busuanzi: true
複製程式碼

單值讀取

<% if(theme.tongji.busuanzi){ %>
	<!-- 省略 -->
  <% } %>
複製程式碼

集合

# navigation menu
menu:
  - name: 首頁
    slug: home
    url: /
  - name: 文章
    slug: archives
    url: /archives
  - name: 關於
    slug: about
    url: /about
複製程式碼

集合遍歷讀取

<% (theme.menu||[]).forEach(function(value){ %>
						<li>
							<a class='flat-box nav-<%=value.slug%>' href='<%=url_for(value.url)%>'>
								<%=value.name%>
							</a>
						</li>
					<%})%>
複製程式碼

foreach() 之後,value 即為每組資料的一個物件,直接按屬性名讀取。

4.3 注意事項

在配置檔案中注意 -: 的後面是有一個空格的。

5. 多機更新部落格--我的最佳實踐

實際上,配置完部落格之後會有這麼一種場景:假如我的資料損壞了,或者我想在另一臺電腦發博文,怎麼辦? 其實,從上面這麼一個流程下來,你會發現:部落格的最主要原料其實就是博文的 md 檔案,有了博文的 md 檔案那麼別的都好說。所以我的做法就是把博文hexo 配置檔案之類必不可少的東西放在雲盤,這裡我選擇的是開源中國的碼雲(不是馬雲哦,碼雲像 Github 一樣都是一個基於Git的遠端程式碼倉庫,好處在於可以免費建立私有倉庫以及在國內可以有更快的訪問速度)。

5.1 資料夾概覽

MyBlog
	├─主題
	├─其他
	├─部落格文章
	│  ├─圖片
	│  ├─引用資料
	│  └─文章
	│      ├─about
	│      └─_posts
	└─部落格配置檔案
複製程式碼
  • 部落格配置檔案:主要是 Hexo 的配置檔案 _config.yml
  • 部落格文章:這是部落格的主要「原料」,Hexo 生成 html 的內容來源
  • 其他:放置其他的一些擴充的功能
  • 主題:Hexo 用的主題

5.2 部落格管理說明

  1. 部落格文章->文章,會通過 Always Sync 同步到 Hexo(D:\MyBlog\Blog) 的資料夾,最後 deploy 到 Github 是在 Hexo 資料夾中進行的。
  2. 主題資料夾會同步到 Hexo 資料夾的主題中去。
  3. 部落格配置檔案會同步到 Hexo 資料夾的根目錄中去。

5.3 博文編寫工作流

  1. 部落格文章->文章->_posts中進行博文編寫。
  2. 在 Hexo 資料夾中進行 hexo ghexo s,本地檢查無誤後 hexo d 進行部署。

5.4 多機更新工作流

  1. 安裝 Node js,Git。
  2. 安裝 Hexo。
     npm config set registry "https://registry.npm.taobao.org"
     npm install -g hexo-cli  #hexo安裝
     npm install hexo-renderer-pandoc --save
     npm install hexo-katex --save 
     npm install hexo-renderer-jade --save #Noise主題相關
     npm install hexo-renderer-less --save  #Noise主題相關
     npm i -S hexo-generator-search hexo-generator-feed hexo-renderer-less hexo-autoprefixer hexo-generator-json-content #Material主題相關
     npm install hexo-deployer-git --save  #部署相關
複製程式碼
  1. Git 配置以及 Github 配置SSH。
  2. clone 此 repo。
  3. 在 repo 資料夾下 hexo init 新建一個 Hexo(命名為 Blog ) 資料夾,此資料夾不用加入 repo 的版本管理。
  4. 配置部落格檔案以及主題。
  5. 在部落格文章->文章->_posts 中編寫博文。
  6. 把博文複製到 Hexo 資料夾中進行 hexo ghexo s,本地檢查無誤後 hexo d 部署。

6. 參考資料

知行合一 | 用 Hexo 搭建部落格

相關文章