更新版本 hexo 2.8 to 3.1 惡夢

contents

  1. 1. Parser Error
  2. 2. Plugin Update
  3. 3. New Feature
  4. 4. Browser
  5. 5. Setting

Parser Error

主要原因是因為 hexo 3.0 引入新的渲染引擎 mozilla/Nunjucks 的問題。

由於有 Nunjucks 的關係,有一些渲染方式要改變寫法。

Plugin Update

很多指令都模組化,所以要個別安裝需要的操作,並且插件一定要透過 npm 安裝,寫入到 blog/package.json 才會被接受。

1
2
3
$ npm install hexo-generator-sitemap --save
$ npm install hexo-generator-feed --save
$ npm install hexo-deployer-git --save

由於 mozilla/Nunjucks 的關係,改變最麻煩的是 tag plugin 的名稱,例如 rawblock -> rawmath-block -> math 的更動,因此要寫個程式進行轉換。

由於 latex 的緣故,hexo-math 這個 plugin 需要更動,以免 Nunjucks 解析時發生錯誤,強制讓 inline 的寫法有對齊,所以我把 hexo-math 做了客製化修改。

1
2
3
4
5
6
7
hexo.extend.tag.register("math", function(args, content) {
var result;
result = "<span>$" + content + "$</span><!-- Has MathJax -->";
return result;
}, {
ends: true
});

並且取消自動注入,因為目前的 hexo server 在修改文章時,效能不佳,以下代碼是 hexo-math 在用自動注入的部分呼叫函數,若使用這個函數,速度拖累很多。

1
2
3
hexo.extend.filter.register("after_render:html", function(src, data) {
return src;
}

New Feature

分頁支持

1
2
$ npm install hexo-generator-archive --save
$ npm install hexo-generator-tag --save

在這幾個地方增加分頁設計,讓一次載入大量資料的需求減少。

Browser

開啟 hexo server 時,若更動文章內容,刷新速度變得非常慢,並且會造成 nodejs 狂吃 CPU 和 memory 同時也重新渲染所有文章。

Setting

blog/__config.yml 也做了些調整,簡化不少設定檔,若不特別需要,則不會出現。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
archive_generator:
per_page: 20
yearly: true
monthly: false
category_generator:
per_page: 10
tag_generator:
per_page: 20
browser_sync:
port: 4000
browser: "google chrome"
open: false
server:
port: 4000
log: true
ip: 127.0.0.1

以及在過去版本一直被我遺忘的 highlight 設定,要把 tab 換成四個空白,有時候貼上常常會發生 tab 變成四個空白的解析,現在版本先關閉自動偵測 highlight,官方說那裏解析速度上有問題。

1
2
3
4
5
highlight:
enable: true
line_number: true
auto_detect: false
tab_replace: " "

這裡還是有個問題,highlight.js 不處理以下情況

1
<tab><space><space><space><space><tab>

最後一個 tab 將不會被轉換,也就是只有行首的 tab 會自動轉換,想必是對齊部分不容易寫。