這個網站是怎麼蓋起來的

第一篇文章,順便當作這個網站的技術說明。

整站是完全靜態的:主頁與每一篇文章都在建置時就產生好 HTML,讀者拿到的是純檔案, 沒有任何伺服器端 API 或資料庫在請求當下運作。

發布流程

寫文章的動作就是「新增一個 .md 檔,然後 push」。剩下的部分沒有任何一步需要我動手:

從 Markdown 到讀者的建置流程:本機編輯 .md、git push 到 main、Cloudflare Pages 執行 astro build、產生的靜態檔案由 CDN 送出

推上 main 之後,Cloudflare Pages 會偵測到新的 commit、跑一次建置、把產出的靜態檔案 發布到邊緣節點。沒有手動部署步驟,也沒有「忘記按發布」這種失誤空間。

Markdown 裡的圖片與影片

圖片就是一般的 Markdown 語法,檔案放在 public/images/ 底下,寫 ![說明](/images/xxx.svg) 就會 內嵌在文字對應的位置。

影片走 YouTube。文章裡不用貼一整段 <iframe>,只要寫一行 directive:

::youtube[影片標題]{#VIDEO_ID}

建置時會被轉成一個 16:9 的響應式播放器:

這樣做的好處是,文章檔案裡只記錄「影片 ID」這一件穩定的事實。嵌入的細節 (用 nocookie 網域、lazy loading、要開哪些權限)全部集中在一個 Markdown 外掛裡, 之後要換播放器不必回頭改任何一篇舊文章。

留言

文章底下的留言區是 Giscus,後端是另一個 GitHub repo 的 Discussions。 留言需要 GitHub 帳號——這是一個明知的取捨:換來的是完全不用自己維護留言後端。

同樣地,留言元件也刻意跟文章內容解耦:每篇文章靠自己的網址對應到獨立的討論串, 文章的 .md 檔裡沒有任何一個字提到 Giscus。哪天想換掉它,改一個元件就好。

Comments