跳到主要內容
返回文章列表

把部落格一次升到 Astro 7 與 Tailwind 4

發布: 4 分鐘

兩年前山姆鍋把部落格從 Hexo 換成 Astro,當時選的是 AstroPaper 主題,之後幾乎沒大動過。今天終於坐下來把整套技術棧補上進度,順便讓站台看起來比較像「我是山姆鍋」,而不是還掛著主題預設皮膚。

這不是一篇逐步操作手冊,比較像當天做完後的回顧:改了什麼、為什麼要改、踩到哪些坑。

目錄

展開目錄

Astro:Content Layer 再到 7

第一步是先把站台推到 Astro 5 的 Content Layer。內容設定從舊的 src/content/config.ts 遷到專案根層的 src/content.config.ts,文章改用 glob loader 載入。連帶幾篇舊文裡不合法的 Shiki 語言標記、壞掉的圖片路徑,也一併清掉,否則新的建置管線會直接炸掉。

接著再升到 Astro 7。這段比較瑣碎,但影響面不小:

  • markdown 的 remark/rehype 改走新的 unified 處理器設定
  • 動態路由的 params 必須明確轉成字串
  • 官方 Tailwind integration 已經不建議繼續用,先暫時改成 PostCSS 過渡

CI 也順便升到 Node 24,跟本機開發環境對齊。

Tailwind CSS v4

Astro 升完後,樣式層接著上 Tailwind v4。最大的感覺是「設定檔變少了」:刪掉 tailwind.config.cjs,改用 Vite 外掛,主題 token 直接寫進 CSS 的 @theme

Astro 元件裡的 scoped style 若要再用 @apply,還得補上 @reference,不然建置會抱怨找不到 utility。另外 v4 對 outline 的預設行為變了,站內連結的 focus ring 一度變得很突兀,後來才調回「只在鍵盤 focus 時顯示」的舊習慣。

升級過程中 header 的 flex 排版也跑掉過一次,這類細節通常要開著瀏覽器邊對才找得到。

自訂 ink-teal 品牌色

AstroPaper 預設是偏藍的強調色,暗色模式甚至帶橘。用久了總覺得不像這個站。今天把 skin token 改成墨綠色系(ink-teal):

  • 亮色強調色約等同 Tailwind teal-700
  • 暗色強調色改成較亮的 teal,對比比較舒服
  • 正文改用 Noto Sans TC;程式碼區塊才走 IBM Plex Mono
  • 拿掉 Flowbite,站台皮膚改成自己維護

作者卡片、提示區塊、頁首頁尾也跟著微調。目標很單純:關掉瀏覽器分頁再開,還認得出這是山姆鍋的站。

OG 圖檔重畫

社群分享預覽圖原本還是 AstroPaper 那套巢狀卡片加 inline base64 素材。品牌色一換,那些圖就顯得格格不入。

這次把 post/site 兩套模板重寫成標題優先的版面:左側色帶、淡淡的氛圍圓形、共用的主題色與字級規則。產生邏輯也抽到共用模組,之後要再改色比較不用到處找。

TypeScript 6 與工具鏈整理

最後一波是依賴體檢:TypeScript 升到 6,一併刷新過時套件。過程中順手做了幾件衛生工作:

  • ESLint 改成 flat config(eslint.config.mjs),舊的 .eslintrc.js.eslintignore 退休
  • tsconfig 拿掉已棄用的 baseUrl,改靠 paths
  • 搜尋元件、archive 動態路由、OG 產生器裡被新工具鏈抓出來的型別問題修掉

建置與 lint 能過,才比較敢說這次升級不是「本機碰巧可以跑」。

小結

一天之內把 Astro 5/7、Tailwind 4、品牌色、OG 模板與 TypeScript 6 都推過一遍,強度有點高,但大部分時間其實花在「讓舊內容與舊假設跟新 API 對上」。靜態部落格的好處是:升級痛苦是一次付清,之後寫文章還是 Markdown 開檔就好。

下一篇大概會繼續寫文章,而不是再對建置設定开战。至少,暫時是這麼計畫的。

Sampot (山姆鍋)
Sampot (山姆鍋)

獨立軟體開發者,專長分散式系統、Web 應用與雲端服務架構。目前一人開發NT² Vault。工作之餘關注開源軟體的發展與應用,偶爾在這裡碎念與分享。