Astro v5 x DevNow

LaughingZhu發表於2024-12-06

先介紹下 DevNow

  • DevNow Github
  • 體驗網站

DevNow 是一個精簡的開源技術部落格專案模版,支援 Vercel 一鍵部署,支援評論、搜尋等功能,歡迎大家體驗。同時也支援 Follow、 RSS 訂閱,歡迎大家訂閱。

目前承載著:

  • 我的Blog:一些相關的技術文章和個人生活記錄。
  • Weekly: 每週釋出一些技術圈中熱度比較高的內容,主要是技術相關的。
  • Ph-Daily: 熱榜可能會穿插一些其他的話題和一些開源專案介紹等。
  • DevNow:開源專案的一些迭代資訊和介紹。

背景

很早之前就看到 Astro 5.0 beta 版本,但是沒有跟進,想著等穩定版本釋出在更新。隨著 Astro 5.0 在 12月4號 正式釋出,今天正好不忙就把 DevNow 專案更新到了 Astro v5.0 ,不過這個版本的更新不是很大,但是有很多很多的新特性,包括 Content Layer、Server Islands、Prerendering、Vite 6 等等,這些都是很值得大家關注的。具體的更新可以看以下文章:

  • Astro 5.0 釋出
  • DevNow 更新內容

下邊主要記錄下升級過程中遇到的問題,以及解決的辦法。

升級內容

Content Layer

主要是透過新的 Content Layer loader 來實現載入本地資原始檔,具體如下圖:

文章結構

  • 用 id 替換掉 slug
  • render 引入替換

Issues

loader 載入本地檔案

透過 loader glob 載入本地檔案的時候,預設是透過 entry id 來生成文章的索引, id 和原先的 slug 的區別是 id 會帶上檔名字尾,如:

// id: 2022-05-22.md
// slug: devnow

會導致原先的文章無法載入,搜尋引擎已經收錄的都是 slug 這種路由,這樣替換成 id 會導致路由的變更,這裡還是期望生成 slug 這樣的路由。

Astro 中提供了兩種方式:

  • legacy-flags : 透過 legacy-flags 來相容原先的資料載入方案。
  • 繼續使用 Content Layer loader ,然後在 loader 中進行處理: 透過自定義 generateId 來實現自定義 id。解決方案是在社群找到的 feat: add glob loader

其他的設計一些小改動,具體的改動可以看 DevNow 的升級 Commit 中的詳細資訊。

剩下的後邊在繼續跟進,還有些新的 Feature 也會在後續迭代上。

相關文章