透過 100 多個技巧的集合來學習 Nuxt!
發布·  

Nuxt 3.3

3.3.0 是一個次要(功能)版本,包含許多效能和 DX 改善、錯誤修復以及可供使用的全新功能。

✨ 本機模組開發 DX

我們進行了一系列變更,以啟用本機模組並改善 DX。

我們現在會自動掃描您的 ~/modules 資料夾,並將該處的頂層檔案註冊為您專案中的模組 (#19394)。

當這些檔案變更時,我們會自動重新啟動 nuxt 伺服器。

export default defineNuxtConfig({
  modules: [
    '@nuxtjs/tailwindcss',
-   '~/modules/purge-comments'
  ]
})

我們現在也公開 nuxt/kit,以便在您的本機專案中輕鬆存取 kit composables,而無需安裝 @nuxt/kit (#19422)。

閱讀有關本機模組的文件.

♻️ 重新啟動 Nuxt

您可以將檔案新增至 watch 陣列,以自動重新啟動伺服器 (#19530)。這對於模組作者來說可能特別有用。您也可以使用新的 restart hook 來觸發 Nuxt 伺服器的重新啟動 (#19084)。

🔥 效能提升

我們已將靜態資產 maxAge 增加到 1 年,作為最佳實務做法 (#19335),並支援 tree-shaking 更多您的建置 (#19508)。

nuxt-performance-improvements

我們現在也支援使用物件語法預先載入帶有路由的 <NuxtLink> (#19120)

<NuxtLink :to="{ name: 'home', query: { year: '2023' } }">Home</NuxtLink>

我們也會追蹤您使用的每個模組執行設定所需的時間,並在時間過長時發出警告。您可以透過執行帶有 DEBUG=1 的開發伺服器來查看所有這些值 (#18648)。

DEBUG=1 npx nuxt dev
 Module pages took 1.5ms to setup.
 Module meta took 3.15ms to setup
 Module components took 4.5ms to setup.
...

您也可以選擇加入 Nuxt 的一些內部最佳化,方法是將 composables 設定為在特定環境中進行 treeshaken (#19383) 或自動注入 magic keys (#19490)。

🐛 錯誤處理

我們現在預設處理 chunk 錯誤 (#19086),這表示如果您的網站透過重新部署進行更新,**我們會自動處理在導覽時重新載入**。

若要停用此行為,請將 experimental.emitRouteChunkError 選項設定為 'manual',並使用新的 reloadNuxtApp composable 自行處理。了解更多我們如何在 chunk-reload.client.ts plugin 中實作。

您也可以設定 experimental.restoreState,以便在重新載入時保留應用程式的部分狀態

nuxt.config.ts
defineNuxtConfig({
  experimental: {
    restoreState: true
  }
})

我們還有一個新的實驗性錯誤處理元件:<NuxtClientFallback> (#8216),它可以在伺服器上擷取呈現錯誤,使用備用內容取代它們,並在客戶端上以細微方式觸發重新呈現發生錯誤的部分。可以使用 experimental.clientFallback 啟用此功能 - 非常歡迎提供回饋!

⚡️ Head 改善

我們已移轉為直接使用 unhead (#19519),並自動從您的客戶端建置中 tree-shake 僅限伺服器的 head composables,例如 useServerHead (#19576),這表示您可以擁有優異的 SEO,而無需在您的客戶端建置中包含僅與網路爬蟲相關的中繼標籤邏輯。

還有一個新的 useHeadSafe composable,可處理清理不受信任的使用者輸入 (#19548)。

🪵 在瀏覽器開發人員工具中進行更好的記錄

透過與 Chrome 開發人員工具團隊合作,我們在 unjs + Nuxt 生態系統中加入了一些功能,這表示我們現在在您的(目前為止基於 Chromium 的)瀏覽器中,對於從記錄中隱藏 Nuxt 內部堆疊追蹤擁有第一級支援 #19243。我們也針對涉及 Nuxt hooks 的堆疊追蹤進行了一些改善 (unjs/hookable#69unjs/hookable#68) 實作 console.createTask

之前之後
before-nuxt-console-improvementsafter-nuxt-console-improvements

💪 類型改善

伺服器 API 路由的類型現在更正確 - 傳回類型中會移除無法序列化的類型 (unjs/nitro#1002)。

我們現在也會為更多 NuxtApp 進行類型化,並正確為未知的注入類型化,以提高類型安全性 (#19643)。

如果您在使用 transform + default 和 Nuxt 資料擷取 composables 時,在正確類型方面遇到困難,請不用擔心 - 我們現在會正確推斷類型 (#19487)。

⚗️ Nitro 增強功能

此版本隨附 Nitro v2.3,它本身帶來許多改善。請查看版本以了解更多資訊。

我們現在支援在 nitro 伺服器路由中使用 useAppConfig (#19489) - 這是一個期待已久的變更。現在,useAppConfig 在整個應用程式中都可一致使用,以進行來自圖層、模組等的非執行階段組態設定。

我們也新增了 nitro:build:public-assets hook,以允許修改來自 nitro 預先呈現/建置階段的資產輸出 (#19638)。

🛠️ 建置變更

作為朝向對 PNP 和 pnpm 支援的第一級支援,而無需 --shamefully-hoist的一部分,我們已停止支援使用 CJS 解析模式的某些內部(已棄用)公用程式 (#19537#19608)。

我們現在也使用 ESM 搜尋路徑解析 nuxt@nuxt/kit 等相依性。我們會密切關注此情況。

我們也在準備支援新的 TypeScript Node16 模組解析 (#19606) 的基礎,作為此準備工作的一部分,我們已變更執行階段輸出的格式(使用 .js 而不是 .mjs 副檔名、為子路徑匯出提供 types 欄位等等)。

🗺️ 自訂組態結構描述(進階)

我們一直在測試一個實驗性功能,以允許模組和使用者擴充 Nuxt 組態結構描述 (#15592),而我們現在已預設啟用此功能 (#19172)。我們預期這對模組和圖層/佈景主題作者特別有用,並且應該為其使用者帶來一些更完善的 DX。

變更日誌

透過比較變更來查看完整的變更日誌,或在 GitHub 上查看版本

我們要感謝在此版本中提供協助的 28 位貢獻者 💚