解決 Hexo 更新系統或使用 CI 部署後文章出現更新日期的問題

前言

最新更新 Hexo 的時候發現一些問題就是文章莫名其妙通通全部被加上更新時間,因此這一篇記錄一下該如何解決這個問題,否則明明沒有更新的文章卻全部標記更新,這樣對於讀者來講會非常困擾。

事發原因

最近剛好在更新 Hexo

Hexo 5.4.0 -> Hexo 6.3.0
NexT 8.5.0 -> Next 8.13.1

結果就發生了很奇怪的狀況,明明文章都沒有更新,但是在重新部署後卻會出現「更新時間

更新時間

那這樣子對於讀者來講非常困擾,因為明明沒有更新的文章卻全部標記更新,所以這一篇就記錄一下問題原因以及怎麼解決。

解決方式

首先 Hexo 預設在抓取更新時間的方式是基於檔案的最後修改時間,那麼當我們更新系統時通常是直接將整個 source 複製貼到新 Hexo 系統內,而這個行為對於檔案的最後修改時間就會造成影響,因此我們需要將這個功能關閉。

首先打開 Hexo 的 _config.yml 檔案,找到 updated_option 這個設定,將原本的 mtime 改成 date 即可。

1
2
3
4
5
6
7
8
# Date / Time format
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss
## updated_option supports 'mtime', 'date', 'empty'
updated_option: 'date'

這邊也列一個每個參數的意思

  • mtime: 使用檔案最後修改時間
  • date: 使用文章的日期
  • empty: 不顯示更新時間

那麼由於我們不可能不顯示更新時間,所以這邊會建議選擇 date 這個選項。

接著你就會看到「更新時間」都消失了,但卻也延伸另一個問題,我們更新文章後無法出現「更新時間」,那麼解決這個問題的方式很簡單只需要在文章上方增加一個屬性

1
updated: 

未來你的文章若有更新時,就可以自己手動更改,雖然這個方式有點笨,但是卻也可以避免一些常見的問題,像是 CI 自動部署導致全部文章都顯示「更新時間」的問題,因為 CI 在運行時會先執行 git clone 指令,而這時候文章就會被拷貝建立,因此就會變成更新時間。

最後你也可以打開 Hexo 的 scaffold 檔案,將 updated 這個屬性加入到預設的文章中,這樣子未來你新增文章時就會自動加入這個屬性,以我的為舉例就會是如下

1
2
3
4
5
6
7
8
9
10
---
title: {{ title }}
date: {{ date }}
updated: {{ date }}
tags:
categories:
description:
---

## 前言

這樣子預設 updated 就會吃建立時間,而你的文章若有更新時,就可以自己手動更改。

Liker 讚賞

這篇文章如果對你有幫助,你可以花 30 秒登入 LikeCoin 並點擊下方拍手按鈕(最多五下)免費支持與牡蠣鼓勵我。
或者你也可以考慮請我喝一杯咖啡

Google AD

撰寫一篇文章其實真的很花時間,如果你願意「關閉 Adblock (廣告阻擋器)」來支持我的話,我會非常感謝你 ヽ(・∀・)ノ