0%

把 Hexo 更新到 4.0.0 的趣事分享

把 Hexo 更新到 4.0.0 的趣事分享

其實更新的不只是 Hexo 其它相關的套件也一併更新了!

名稱 更新前 更新後
Hexo 3.9.0 4.0.0
Hexo Next 7.1.x 7.4.2
hexo-deployer-git 1.0.0 2.0.0
hexo-generator-archive 0.1.5 1.0.0
hexo-generator-category 0.1.3 1.0.0
hexo-generator-feed 1.2.2 2.0.0
hexo-generator-index 0.2.1 1.0.0
hexo-generator-searchdb 1.0.8 1.1.0
hexo-generator-tag 0.2.0 1.0.0
hexo-renderer-ejs 0.3.1 1.0.0
hexo-renderer-marked 0.3.2 2.0.0
hexo-renderer-stylus 0.3.3 1.1.0
hexo-server 0.3.3 1.0.0

基本上所有套件都更新了一輪,除了 hexo-generator-sitemap 本來就是最新版本的。

更新套件

  1. 運行 npm outdated

    1
    2
    3
    Package              Current  Wanted  Latest  Location
    ... # 上面本來有一大排,但是沒截到
    hexo-generator-feed 1.2.2 1.2.2 2.0.0 hexo-site
  2. 因為我輸入 npm update 並沒有直接更新過期套件,應此我就一個一個更新。

    後續有查了一下這個方式並不是正確的更新套件方式。
    有高手如果知道的話可以寄個 Email 教一下。

  3. 運行 hexo s 本地預覽網站

問題發生

在更新 Hexo 到 4.0.0 的時候發現大部分有 fontawesome icon 的地方都變成直接把 html 原始碼了。

HTML Source

一開始的想法是先去找找影響的範圍,發現是 menu-items 的地方還有下方的選擇頁數的地方的 icons 變了,而這些東西都是 Hexo Next 的物件。

後來才想到可能是 Hexo 的渲染方式變了,因此想說會不會有人在 Hexo Next 提出 Issue,沒想到逛一下就被我翻到了。

https://github.com/theme-next/hexo-theme-next/issues/1217

NexT v7.4.2 之前的版本在 Hexo 4.0 下会出现图标无法显示的问题(因为 hexo-util 会强制转义),请更新到 v7.4.2,如果不了解 git tag 的使用方法,请跟随 master 更新.

原來是 hexo-util 會強制轉譯,只要更新到 v7.4.2 以上就可以了,所以我就更新到 v7.4.2 了。

開始更新 Hexo Next

  1. 把最新的 Hexo Next Clone 下來,並切到穩定版本。

    1
    2
    3
    4
    git clone https://github.com/theme-next/hexo-theme-next themes/next7
    cd themes/next7
    git checkout v7.4.2
    cd ../../
  2. 修改 Hexo 設定,根目錄的 _config.yml,把 theme: next 改成 theme: next7

  3. 將原本 themes/next/_config.yml 的設定慢慢的套用到 themes/next7/_config.yml

  4. 確認沒問題後把 themes/next 東西搬走並用 themes/next7 取代。

  5. 按照之前的流程把網站建起來

如果你本來的 config 是放在 source/_data/next.yml

那你不用做上面的 3-4 步,但是比較需要注意一些雷。

  1. 參考 themes/next/_config.yml 逐步套用到 source/_data/next.yml

關於 git submodule

為人詬病的是 git submodule 沒辦法指定 tag 只能指定 branch name

如果你目前的 hexo next repo 不是以 submodule 的形式存在你的專案,而你想要改用 submodule,你必須執行以下步驟。

  1. 把你曾經在 next 專案中修改過的任何設定,以 custom_file 的形式放到 source/_data
  2. 經過測試沒問題後把 themes/next 資料夾砍掉先進行一次 commit
  3. 執行 git submodule add git@github.com:theme-next/hexo-theme-next.git themes/next

在開發時如果你要 穩定的版本

  1. cd themes/next/
  2. git checkout v7.x.x # 選擇你要的版本
  3. cd ../../
  4. 繼續你平常的工作

遇到一些雷

  • 原本 reward 中有 enable 選項,後來搬去 reward_settings 了,所以如果 reward 中還有 enable 會導致錯誤。
  • submodule 不能使用 tag 只能用 branch
捐贈我喝杯咖啡