隨機手札 雜七雜八之地

部落格Nuxt 2升級Nuxt 3(五):Sitemap模組升級

2 min前端筆記
#blog #nuxt #vue #nuxt2 #nuxt3 #sitemap

原本使用的 Sitemap 模組 @nuxtjs/sitemap 有支援 Nuxt 3 的版本,所以升級起來不如前面幾篇困難,主要就是修改一下設定值而已。


修改設定值

在使用npm升級之後,只要修改設定值就能有基本的 sitemap 功能了:

export default defineNuxtConfig({
  // Sitemap Module: https://sitemap.nuxtjs.org/usage/sitemap/
  //   sitemap: {
  //     hostname: 'https://huangchingchieh.github.io/',
  //     gzip: true,
  //     routes,
  //   },
  // 原本的sitemap改成site,sitemap.hostname改成site.url。
  site: {
    url: 'https://huangchingchieh.github.io',
  },
})

不須動態傳遞 route

之前在 Nuxt 2 的時候需要自行產出動態 routes 並傳遞給模組,新版則不需要,只要 Nuxt Crawler 爬得到的連結,都會被抓到產生出來的sitemap.xml裡面。


更細緻的設定

如果需要為產生的url動態設定lastmod(例如使用文章物件的updatedAt)或是做更細緻的自動化調整,就需要額外的設定,參考官方文件後設定如下:

新增server/api/sitemap.ts
import type { ParsedContent } from '@nuxt/content/dist/runtime/types'
import { serverQueryContent } from '#content/server'
import { asSitemapUrl, defineSitemapEventHandler } from '#imports'

export default defineSitemapEventHandler(async (e) => {
  const { base } = useRuntimeConfig().public
  const contentList = (await serverQueryContent(e).find()) as ParsedContent[]
  return contentList.map((file) => {
    const url = {
      loc: `${base}${file.slug}`,
      lastmod: file.createdAt,
    }
    return asSitemapUrl(url)
  })
})

然後在 sitemap 的設定值新增如下設定值:

export default defineNuxtConfig({
  sitemap: {
    // 路徑是剛剛新增的
    sources: ['/api/sitemap'],
  },
})

後記

大概是這樣,sitemap 功能簡單許多,也沒有換模組,所以升級過程非常容易。


Support me on Ko-fi
相關文章

部落格Nuxt 2升級Nuxt 3(一):bootstrapVue置換成自製的bootrap5元件

如之前規劃,部落格升級 Nuxt3 的第一步是先把 bootstrapVue 抽換成自己實做的 bootstrap5。這篇是紀錄過程中覺得特別困難或是需要研究的部份。

4 min

部落格Nuxt 2升級Nuxt 3:前言

從去年年初開始建置的這個部落格網站,邊寫文章的同時陸陸續續補上功能後,大概到上個月才終於像是有個部落格的樣子。但由於 Nuxt2 即將在 2024/06/30 停止官方支援,而作為基底的 Vue2 更是在 2023/12/31 已停止官方支援,所以……想說要做的新功能可能先放著,先把部落格從 Nuxt2 升級到 Nuxt3 比較好。

5 min

部落格Nuxt 2升級Nuxt 3(六):Vuex → Pinia

Nuxt 3 的狀態管理套件從 Nuxt 2 的 Vuex 改成了 Pinia,兩者差異不算大,部落格用到的功能也不多。其中比較要注意的就是 Nuxt 3 不再提供nuxtServerInit方法,若需要在 server 端初始化一些資料的話,就要透過其他作法來完成。

5 min