元件

原始檔
Nuxt Kit 提供了一套實用工具來幫助你處理元件。你可以全域性或區域性註冊元件,還可以新增目錄以供掃描元件。

元件是 Nuxt 應用程式的基石。它們是可重用的 Vue 例項,可用於建立使用者介面。在 Nuxt 中,預設情況下會自動匯入 `components` 目錄中的元件。但是,如果你需要從替代目錄匯入元件或希望根據需要選擇性匯入它們,@nuxt/kit 提供了 addComponentsDiraddComponent 方法。這些實用工具允許你自定義元件配置,以更好地滿足你的需求。

觀看 Vue School 關於注入元件的影片。

addComponentsDir

註冊一個目錄,以便掃描元件並在使用時才匯入。請記住,除非你指定 global: true 選項,否則這不會全域性註冊元件。

使用

export default defineNuxtModule({
  meta: {
    name: '@nuxt/ui',
    configKey: 'ui',
  },
  setup () {
    addComponentsDir({
      path: resolve('./runtime/components'),
      prefix: 'U',
      pathPrefix: false,
    })
  },
})

型別

function addComponentsDir (dir: ComponentsDir, opts: { prepend?: boolean } = {}): void

引數

dir 一個包含以下屬性的物件

屬性型別必需描述
pathstringtrue包含元件的目錄路徑(絕對或相對)。你可以使用 Nuxt 別名(~ 或 @)來引用專案內的目錄,或者直接使用類似於 require 的 npm 包路徑。
patternstring | string[]false接受將針對指定路徑執行的模式。
ignorestring[]false將針對指定路徑執行的忽略模式。
prefixstringfalse將所有匹配的元件字首加上此字串。
pathPrefixbooleanfalse透過其路徑為元件名稱新增字首。
prefetchbooleanfalse這些屬性(prefetch/preload)用於生產環境,以配置帶有 Lazy 字首的元件如何由 webpack 透過其魔法註釋處理。瞭解更多資訊,請參閱webpack 文件
preloadbooleanfalse這些屬性(prefetch/preload)用於生產環境,以配置帶有 Lazy 字首的元件如何由 webpack 透過其魔法註釋處理。瞭解更多資訊,請參閱webpack 文件
isAsyncbooleanfalse此標誌指示元件應非同步載入(帶有一個單獨的 chunk),無論是否使用 Lazy 字首。
extendComponent(component: Component) => Promise<Component | void> | (Component | void)false一個函式,將為目錄中找到的每個元件呼叫。它接受一個元件物件,並應返回一個元件物件或解析為元件物件的 Promise。
globalbooleanfalse如果啟用,則註冊元件以全域性可用。
islandbooleanfalse如果啟用,則將元件註冊為 islands。你可以在 <NuxtIsland/> 元件描述中瞭解更多關於 islands 的資訊。
watchbooleanfalse監視指定路徑的更改,包括檔案新增和檔案刪除。
extensionsstring[]falseNuxt builder 支援的擴充套件。
transpile'auto' | booleanfalse使用 build.transpile 轉譯指定路徑。如果設定為 'auto',如果 node_modules/ 在路徑中,它將設定 transpile: true

opts

屬性型別必需描述
prependbooleanfalse如果設定為 true,則目錄將使用 unshift() 而不是 push() 預先新增到陣列中。

addComponent

註冊一個元件以自動匯入。

使用

import { addComponent, createResolver, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: '@nuxt/image',
    configKey: 'image',
  },
  setup () {
    const resolver = createResolver(import.meta.url)

    addComponent({
      name: 'NuxtImg',
      filePath: resolver.resolve('./runtime/components/NuxtImg.vue'),
    })

    addComponent({
      name: 'NuxtPicture',
      filePath: resolver.resolve('./runtime/components/NuxtPicture.vue'),
    })
  },
})

型別

function addComponent (options: AddComponentOptions): void

引數

options: 一個包含以下屬性的物件

屬性型別必需描述
namestringtrue元件名稱。
filePathstringtrue元件的路徑。
declarationPathstringfalse元件宣告檔案的路徑。它用於生成元件的 型別模板;如果未提供,則使用 filePath
pascalNamestringfalsePascal 命名法元件名稱。如果未提供,將從元件名稱生成。
kebabNamestringfalseKebab 命名法元件名稱。如果未提供,將從元件名稱生成。
exportstringfalse指定命名匯出或預設匯出。如果未提供,將設定為 'default'
shortPathstringfalse元件的短路徑。如果未提供,將從元件路徑生成。
chunkNamestringfalse元件的 chunk 名稱。如果未提供,將從元件名稱生成。
prefetchbooleanfalse這些屬性(prefetch/preload)用於生產環境,以配置帶有 Lazy 字首的元件如何由 webpack 透過其魔法註釋處理。瞭解更多資訊,請參閱webpack 文件
preloadbooleanfalse這些屬性(prefetch/preload)用於生產環境,以配置帶有 Lazy 字首的元件如何由 webpack 透過其魔法註釋處理。瞭解更多資訊,請參閱webpack 文件
globalbooleanfalse如果啟用,則註冊元件以全域性可用。
islandbooleanfalse如果啟用,則將元件註冊為 island。你可以在 <NuxtIsland/> 元件描述中瞭解更多關於 islands 的資訊。
模式'client' | 'server' | 'all'false此選項指示元件應在客戶端、伺服器還是兩者上渲染。預設情況下,它將在客戶端和伺服器上渲染。
prioritynumberfalse元件的優先順序,如果多個元件具有相同的名稱,將使用優先順序最高的元件。

示例

如果你想從 npm 包自動匯入元件,並且該元件是命名匯出(而不是預設匯出),你可以使用 export 選項來指定它。

import { addComponent, defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  setup () {
    // import { MyComponent as MyAutoImportedComponent } from 'my-npm-package'
    addComponent({
      name: 'MyAutoImportedComponent',
      export: 'MyComponent',
      filePath: 'my-npm-package',
    })
  },
})