用Docusaurus搭配GitHub Pages建置免費個人部落格
先前介紹過一套靜態網站產生器 (Static Site Generator, SSG) — Jekyll,可完美搭配GitHub Pages使用,快速產生個人Blog建置。而今天要介紹另一套高效有趣的靜態網站產生器 — Docusaurus,有著相當可愛的恐龍Logo,他是由Facebook發起的開源專案 (正確說是Meta)。Jekyll使用的是Ruby作為建構基礎,而Docusaurus則是以node.js作為建置核心,若對node.js較為熟悉的朋友則可以快速的上手與使用。
特色
使用支援React的MDX Markdown語法
由於有Facebook的血統在,因此這套SSG很本 能的可以與Meta自家技術React作擴充,結合了Markdown語法,算是Docusaurus的一大特點。
這裡所說到的,就是MDX,簡言之就是讓Markdown語法支援JSX,可以在Markdown裡引入元件,並有機會達成React的元件共用的優勢。有關MDX,可參考其官網。這裡就不詳細說明,總之,Docusaurus除了單純撰寫Markdown的文件外,讓如果原本對React技術熟悉的人,可以有機會讓文件多出一些互動功能(例如互動圖表)的可能性。
進階功能
提供了版控、快速更換主題(theme)以及多國語系的設定配置與切換的能力。且支援了TypeScript,但如果純粹寫文章的話是可以不理會及使用。
可方便使用於GitHub Pages
Docusaurus可讓網站架設者將心思專注在撰寫文章上,因此只需要透過幾個簡單的指令,就能快速產生好靜態網站,而且他也有專門為GitHub Pages設計的指令,可分別將原始碼 (產生靜態網頁前的程式碼)以及產生好的靜態網站包分成不同的Git Branch,並上傳到GitHub Repo上,完美與GitHub Pages作整合。
Docusaurus的靜態頁面架構
簡單說,在什麼都不改 的情況下,他會快速幫你產生三種應用。
- Pages頁面
- Docs 文件區
- 如果你的文章是有個大主題,且由多篇具順序性的文章組成,適合使用Docs來展現。
- Blog 部落格區
- 如果你的文章以網誌方式呈現,強調發佈時間,且單篇獨立性,這樣就很適合使用Blog來展現。當然,但相同主題仍可使用tag群組分類。
小試身手,真的很簡單
首先你要先在電腦上安裝好node.js (16.14版本),請至官網依個人電腦環境下載與安裝,接著就可以開始安裝Docusaurus了。
使用npx安裝指令
npx create-docusaurus@latest my-site
# 或者
npx create-docusaurus@latest my-site classic
後面若沒有帶template參數,則安裝時會需要選擇,預設建議使用classic
(預設)。
若不使用TypeScript的話,則選擇N
(預設)不套用。
啟動站台
等待安裝好後,則可進入剛建立好的my-site目錄且把站台跑起來。
cd my-site
npm start
如果你在一台新電腦上,把自己寫好的Docusaurus repo再clone下來時,要繼續執行上述的npm start,會出現
docusaurus: command not found
錯誤訊息,不用慌張,只需要執行npm install
把package套件再下載安裝後就ok了。
連到產生好的靜態網站試試
直接到預設的 http://localhost:3000/
看結果
是不是超級簡單,就幫你把靜態頁面產生好了,再來就一步一步看如何在上面添加新的內容。
Docusaurus的版本
目前官方已正式推出v2版本,而且已正式宣告v1版會被廢止,因此請直接使用v2版。兩個版本的 主要差異在於v2版不支援IE 11,如果必須支援IE 11的話,就需要回頭使用v1版本 (雖然官方不建議)。
另外是v2版本支援SPA (Single-Page Application),v1是不支援的。
官方有針對v1移植到v2的指引:https://docusaurus.io/docs/migration
不過因為我沒用過v1版,所以細節也就不多作研究了。
其他特點
其他Docusaurus的特點包括如下:
- 支援較好的SEO
- 網站內容是可被搜尋的
- 支援快速切換日夜閱讀模式
- 基於JAMstack (JavaScript, API, Markup) 靜態網站架構
- 支援TypeScript
目錄結構
my-website
├── blog
│ ├── 2022-10-28-greeting.md
│ ├── 2022-10-29-hello-world.md
│ └── 2022-11-30-welcome.md
├── docs
│ ├── doc1.md
│ ├── doc2.md
│ ├── doc3.md
│ └── mdx.md
├── src
│ ├── css
│ │ └── custom.css
│ └── pages
│ ├── styles.module.css
│ └── index.js
├── static
│ └── img
├── docusaurus.config.js
├── package.json
├── README.md
├── sidebars.js
└── yarn.lock
- blog目錄
- 底下擺放的是blog文章,使用
YYYY-MM-DD-my-blog-post-title.md
方式命名。
- 底下擺放的是blog文章,使用
- docs目錄
- 擺放文件內容,預設會在左邊自動依文章產生側邊欄的超連結。但若對左列的文件結構或順序等有自己特別的擺放方式,則可在sidebar.js檔調整。
- src目錄
- 所有非文件式的檔案可放在這個目錄,例如單頁式page或者React的元件。而在其pages子目錄底下放的Markdown、MDX、TSX檔都會被轉為頁面。
- static目錄
- 底下放置的是靜態的資源檔,這個目錄的檔案在進行Docusaurs建置過程時,會被複製到build目錄下。
寫寫新文章
針對以上的目錄結構,可自行撰寫幾個測試的頁面,擺放在blog、docs底下。若不需要的檔案則可以自行刪除。
設定文章時間
文章最重要的是必須要設定文章的時間,在blog區的排序,也會依據文章所定義的時間進行排序。(越新的文章放越上面)
---
date: 2022-11-13T08:00
---