# 前言:名詞定義

名詞意思
Decap CMSNetlify CMS 後來停止開發了,這是接手下來的專案,也就是在這個庫管理後台首頁中間插入的 cdn 網址,所看到的 Netlify CMS2.0.0
Netlify CMSNetlify 最初提供的靜態網頁後台管理工具

以下按照步驟下去敘述,內含踩過的坑 Orz...

# Deploy

有時候我蠻懶的,所以我是之前逛 GitHub 時,去找這類型現成的儲藏庫,想說 fork 之類的就能得到一個 Hexo(...),Starred 了好幾個,最後實作我選了這個庫,因為它會幫我自動部署到可以為靜態網頁安裝後台管理界面的 Netlify [1]
[1]: 免費方案免費 300 分鐘 Build 時數,我自己用下來,Hexo 發單篇文章或單純調樣式每次 Deploy 大概花幾秒,如果透過本機一次要發很多篇文章推版,會花稍為久一點的時間

進到這個儲藏庫,看到 README,點那個藍色上面有寫 Deploy 字樣的按鈕就對了 xd,它會把你帶到 Netlify,請你創建一個新的 GitHub 儲藏庫去放你的 Hexo 跟管理後台相關檔案,至於部署方案跟語法,前者 Netlify 會自動偵測為 Hexo,後者是這個庫作者已經幫我們寫好 netlify.toml

不過之後另篇主題設置的文章會提到,如果使用 Algolia 搜尋工具,要修改部署語法。

# 初次部署失敗

原因是 Netlify 預設的啟動方式不適用本專案,請參考這篇討論的第一個回答修改 CI 啟動命令跟環境設置

# 讓 Netlify CMS (其實是 Decap CMS) 後台能夠登入

但剛剛那個庫從 Add the Netlify Identity Widget 開始其實是我們要開始手作的

一開始我以為這個庫已經處理好我該改的部分了,但在網站網址後加入 /admin 進到後台,輸入帳密並沒辦法登入,後來根據這篇討論得知:

  1. 電子郵件預設範本給你的網址上是有 token,但少在你的網站後方描了 /admim,但做到這步即使寫了完整網址也沒用,下方會說原因
  2. 配置成功的畫面應該是會出現一個驗證按鈕而非登入輸入框
  3. 初次登入應該要是能設定後台密碼的

點 1 肇因於 source/admin/index.html 的 head 內缺少了 Netlify 身分驗證工具,我們得手動加上它:

<script src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script>

其實加在後台頁面首頁就夠了,有些文章會要你想辦法加在網站根目錄(這樣信箱的驗證連結應該就能作用了),但 Hexo 的首頁是渲染出來的,要加這段代碼是有點麻煩

但這樣還是不夠的,如果你是按照本文步驟建置,由於用於 deploy 的庫年份稍早,這中間 GitHub 已經把 master 分支統一改為 main,所以即使你身分驗證方面的問題處理完,這時候你想登入還是會一直跳出 git gateway 相關的錯誤,所以你要到 source/admin/config.yml 修改你的分支為 main

backend:
  name: git-gateway
  branch: main # 改成 main

其他參考文章:

  • Netlify 身分驗證工具官方文件
  • Decap CMS 官方教你手把手搭建後台
  • 記得開 F12 檢查頁面有沒有確實加上身分驗證小工具
  • 缺少身分驗證工具基本上無法使用
  • 如果早點看到這篇或許能少花點時間 -.-
  • 這篇也是

# 怒換後台為 Static CMS

然而好不容易讓後台可以登入使用了,我發現中文輸入游標會亂跑,完全無法打字,後來發現是現行 Decap CMS 一個長期未修的 bug,其源頭是 Slate JS 某版出現了 Bug(像 Grafana 有陣子也因此出現這個 bug),根據討論加了 CSS 樣式強蓋也毫無作用,這樣怎麼用啦 = =...

很苦惱哇... 後來看到這篇文章提到可以抽換為 Static CMS,就能進行中文輸入了

以下是抽換完的 source/admin/index.html(head 那個樣式表記得加,不然頁面會爛掉 www)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="https://unpkg.com/@staticcms/app@^2.0.0/dist/main.css" />
    <script src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script>
    <title>Content Manager</title>
  </head>
  <body>
    <script src="https://unpkg.com/@staticcms/app@^2.0.0/dist/static-cms-app.js"></script>
    <script>
      window.CMS.init();
    </script>
  </body>
</html>

不過這個 Static CMS 不像 Netlify CMS (其實是 Decap CMS) 可以從富文本編輯器切換成原始碼編輯器,微可惜

另外可以在後台的 config.yml 調整語言界面,這些是 Decap CMS 有支援的語言,應該跟 Static CMS 有支援的差不多,需要到專案下方語言包查證。抽換後繁體中文還是能作用的,所以得知至少 Static CMS 也是支援繁體中文的

source/admin/index.html 抽換語言的設置:

locale: "zh_Hant"

至於後台 Posts 的欄位設置,因為跟我想安裝的主題 Shoka 有點關係,所以之後其他篇文章再說


# 結語

到目前為止,訪問你的 https:// 專案名稱.netlify.app/ 應該就能看到你的 Hexo 還有預設的主題了,但這似乎只是開始... 因為主題安裝可能也是個大坑 `;w;,下一篇再繼續解說