釋出·  

Nuxt 3.5

Nuxt 3.5.0 釋出了,帶來了 Vue 3.3、新預設值、互動式伺服器元件、型別化頁面、環境配置等諸多功能。
Daniel Roe

Daniel Roe

@danielroe.dev

⚡️ Vue 3.3 釋出

Vue 3.3 已經發布,帶來了許多令人興奮的功能,尤其是在型別支援方面。

  • 新的 defineOptions
  • “通用”元件
  • 型別化插槽並在 defineProps 中使用外部型別
  • ... 以及更多

這也顯著改善了在巢狀頁面之間導航時的資料獲取(#20777),這得益於@antfu等等@baiwusanyu-c.

閱讀 完整的釋出公告 以獲取更多詳情。

🙌 Nitropack v2.4

我們一直在對 Nitro 進行大量改進,這些改進已經體現在 Nitro v2.4 中——您可能已經升級,其中包含大量的錯誤修復、Cloudflare 模組工作器格式的更新、Vercel KV 支援等等。

請注意:如果您正在部署到 Vercel 或 Netlify 並希望受益於增量靜態生成,您現在應該更新您的路由規則

routeRules: {
--  '/blog/**': { swr: 3000 },
++  '/blog/**': { isr: 3000 },
}

閱讀 完整的釋出說明

💖 豐富的 JSON 有效載荷

豐富的 JSON 有效載荷序列化 現已預設啟用(#19205, #20770)。這不僅更快,而且允許在從 Nuxt 伺服器傳遞到客戶端(以及在為預渲染站點提取有效載荷資料時)的有效載荷中序列化複雜的物件。

這意味著現在 開箱即用支援各種豐富的 JS 型別:正則表示式、日期、Map 和 Set 以及 BigInt 以及 NuxtError——以及 Vue 特有的物件,如 refreactiveshallowRefshallowReactive

您可以在我們的測試套件中找到示例。

這一切都歸功於Rich-Harris/devalue#58。長期以來,Nuxt 一直使用我們自己的 devalue 分支,因為它存在序列化錯誤和其他非 POJO 物件的問題,但我們現在已經迴歸到原始版本。

您甚至可以使用新的物件語法 Nuxt 外掛註冊自己的自定義型別

plugins/custom-payload-type.ts
export default definePayloadPlugin(() => {
  definePayloadReducer('BlinkingText', data => data === '<original-blink>' && '_')
  definePayloadReviver('BlinkingText', () => '<revivified-blink>')
})

您可以閱讀更多關於此工作原理的資訊此處.

🛝 互動式伺服器元件

此功能應被視為高度實驗性的,但多虧了 @huang-julien 的出色工作,我們現在透過 插槽 在伺服器元件中支援互動式內容(#20284).

您可以在以下位置關注伺服器元件路線圖#19772.

⏰ 環境配置

您現在可以在 nuxt.config.ts 中配置完全型別化的、按環境覆蓋的配置

nuxt.config.ts
export default defineNuxtConfig({
  $production: {
    routeRules: {
      '/**': { isr: true }
    }
  },
  $development: {
    //
  }
})

如果您正在編寫層,您還可以使用 $meta 鍵提供您或您的層使用者可能使用的元資料。

閱讀更多關於按環境覆蓋的配置.

💪 完全型別化頁面

透過與unplugin-vue-router的實驗性整合,您可以在 Nuxt 應用程式中受益於完全型別化的路由——這得益於@posva!

的出色工作。開箱即用,這將啟用 navigateTo<NuxtLink>router.push() 等的型別化用法。

您甚至可以透過使用 const route = useRoute('route-name') 在頁面中獲取型別化引數。

直接在您的 nuxt.config.ts 中啟用此功能

nuxt.config.ts
export default defineNuxtConfig({
  experimental: {
    typedPages: true
  }
})

🔎 “Bundler” 模組解析

我們現在在 Nuxt 中完全支援 bundler 策略模組解析.

如果可能,我們建議採用此方法。它對子路徑匯出具有型別支援,例如,但它比 Node16 解析更精確地匹配 Vite 和 Nuxt 等構建工具的行為。

nuxt.config.ts
export default defineNuxtConfig({
  typescript: {
    tsConfig: {
      compilerOptions: {
        moduleResolution: 'bundler'
      }
    }
  }
})

這開啟了 TypeScript “跟蹤” Node 子路徑匯出的能力。例如,如果一個庫有一個子路徑匯出,如 mylib/path 對映到 mylib/dist/path.mjs,那麼它的型別可以從 mylib/dist/path.d.ts 中引入,而無需庫作者建立 mylib/path.d.ts

⚗️ 獨立的伺服器型別

我們計劃在您的 IDE 中提高應用程式“nitro”和“vue”部分之間的清晰度,我們已經透過為您的 ~/server 目錄單獨生成 tsconfig.json 來發布這第一部分(#20559).

您可以透過新增一個額外的 ~/server/tsconfig.json 幷包含以下內容來使用

{
  "extends": "../.nuxt/tsconfig.server.json"
}

儘管目前這些值在型別檢查(nuxi typecheck)時不會被尊重,但您應該在 IDE 中獲得更好的型別提示。

💀 廢棄

儘管我們沒有對 Nuxt 2 中的 build.extend 鉤子進行型別化或文件化,但我們一直在 webpack 構建器中呼叫它。我們現在明確廢棄它,並將在未來的次要版本中將其移除。

✅ 升級

像往常一樣,我們建議您執行以下命令進行升級

npx nuxi upgrade --force

這也將重新整理你的 lockfile,並確保你拉取 Nuxt 依賴的其他依賴項(尤其是在 unjs 生態系統中)的更新。

📃 完整更新日誌

閱讀完整的釋出說明:https://github.com/nuxt/nuxt/releases/tag/v3.5.0