透過 100 多個提示學習 Nuxt!

Nuxt 如何運作?

Nuxt 是一個最小但高度可自訂的框架,用於建構 Web 應用程式。

本指南將協助您更深入了解 Nuxt 的內部運作,以便在 Nuxt 之上開發新的解決方案和模組整合。

Nuxt 介面

當您使用 nuxi dev 在開發模式下啟動 Nuxt,或使用 nuxi build 建構生產應用程式時,將會建立一個通用的上下文,在內部稱為 nuxt。它持有與 nuxt.config 檔案合併的標準化選項、一些內部狀態,以及由 unjs/hookable 提供支援的強大 鉤子系統,允許不同的元件彼此通訊。您可以將其視為建構核心

這個上下文可以在全域範圍內使用,並透過 Nuxt Kit 組合式函式存取。因此,每個程序只允許執行一個 Nuxt 實例。

為了擴展 Nuxt 介面並在建構過程的不同階段掛鉤,我們可以使用 Nuxt 模組

如需更多詳細資訊,請查看 原始碼

NuxtApp 介面

當在瀏覽器或伺服器上呈現頁面時,將會建立一個共享的上下文,稱為 nuxtApp。此上下文保留了 Vue 實例、執行階段鉤子和內部狀態,例如伺服器端渲染上下文和水合的酬載。您可以將其視為執行階段核心

可以使用 Nuxt 外掛程式和 <script setup> 以及 Vue 組合式函式中的 useNuxtApp() 組合式函式來存取此上下文。可以在瀏覽器中全域使用,但不能在伺服器上使用,以避免在使用者之間共享上下文。

由於如果目前無法使用上下文,useNuxtApp 將會擲出例外,如果您的組合式函式並非總是需要 nuxtApp,則可以使用 tryUseNuxtApp 來替代,它將會傳回 null 而不是擲出例外。

為了擴展 nuxtApp 介面並掛鉤到不同的階段或存取上下文,我們可以使用 Nuxt 外掛程式

如需有關此介面的更多資訊,請查看 Nuxt App

nuxtApp 具有下列屬性

const nuxtApp = {
  vueApp, // the global Vue application: https://vuejs.org/api/application.html#application-api

  versions, // an object containing Nuxt and Vue versions

  // These let you call and add runtime NuxtApp hooks
  // https://github.com/nuxt/nuxt/blob/main/packages/nuxt/src/app/nuxt.ts#L18
  hooks,
  hook,
  callHook,

  // Only accessible on server-side
  ssrContext: {
    url,
    req,
    res,
    runtimeConfig,
    noSSR,
  },

  // This will be stringified and passed from server to client
  payload: {
    serverRendered: true,
    data: {},
    state: {}
  }

  provide: (name: string, value: any) => void
}

如需更多詳細資訊,請查看 原始碼

執行階段上下文 vs. 建構上下文

Nuxt 使用 Node.js 建構和捆綁專案,但也具有執行階段的一面。

雖然這兩個區域都可以擴展,但執行階段上下文與建構時隔離。因此,除了執行階段配置之外,它們不應共享狀態、程式碼或上下文!

nuxt.configNuxt 模組 可以用於擴展建構上下文,而 Nuxt 外掛程式 可以用於擴展執行階段。

當建構生產應用程式時,nuxi build 將會在 .output 目錄中產生獨立的建構,獨立於 nuxt.configNuxt 模組