模块

Nuxt Kit 提供了一组实用程序,可帮助你创建和使用模块。你可以使用这些实用程序创建自己的模块或复用现有模块。

模块是 Nuxt 的构建块。Kit 提供了一组实用程序来帮助你创建和使用模块。你可以使用这些实用程序创建自己的模块或复用现有模块。例如,你可以使用 defineNuxtModule 函数定义模块,并使用 installModule 函数以编程方式安装模块。

¥Modules are the building blocks of Nuxt. Kit provides a set of utilities to help you create and use modules. You can use these utilities to create your own modules or to reuse existing modules. For example, you can use the defineNuxtModule function to define a module and the installModule function to install a module programmatically.

defineNuxtModule

定义一个 Nuxt 模块,自动将默认值与用户提供的选项合并,安装所有提供的钩子,并调用可选的 setup 函数进行完全控制。

¥Define a Nuxt module, automatically merging defaults with user provided options, installing any hooks that are provided, and calling an optional setup function for full control.

类型

¥Type

function defineNuxtModule<OptionsT extends ModuleOptions> (definition: ModuleDefinition<OptionsT> | NuxtModule<OptionsT>): NuxtModule<OptionsT>

type ModuleOptions = Record<string, any>

interface ModuleDefinition<T extends ModuleOptions = ModuleOptions> {
  meta?: ModuleMeta
  defaults?: T | ((nuxt: Nuxt) => T)
  schema?: T
  hooks?: Partial<NuxtHooks>
  setup?: (this: void, resolvedOptions: T, nuxt: Nuxt) => Awaitable<void | false | ModuleSetupReturn>
}

interface NuxtModule<T extends ModuleOptions = ModuleOptions> {
  (this: void, inlineOptions: T, nuxt: Nuxt): Awaitable<void | false | ModuleSetupReturn>
  getOptions?: (inlineOptions?: T, nuxt?: Nuxt) => Promise<T>
  getMeta?: () => Promise<ModuleMeta>
}

interface ModuleSetupReturn {
  timings?: {
    setup?: number
    [key: string]: number | undefined
  }
}

interface ModuleMeta {
  name?: string
  version?: string
  configKey?: string
  compatibility?: NuxtCompatibility
  [key: string]: unknown
}

参数

¥Parameters

definition

类型:ModuleDefinition<T> | NuxtModule<T>

¥Type: ModuleDefinition<T> | NuxtModule<T>

必需:true

¥Required: true

模块定义对象或模块函数。

¥A module definition object or a module function.

  • meta(可选)
    类型:ModuleMeta
    模块的元数据。它定义了模块名称、版本、配置键和兼容性。
  • defaults(可选)
    类型:T | ((nuxt: Nuxt) => T)
    模块的默认选项。如果提供了函数,它将以 Nuxt 实例作为第一个参数被调用。
  • schema(可选)
    类型:T
    模块选项的架构。如果提供,则选项将应用于架构。
  • hooks(可选)
    类型:Partial<NuxtHooks>
    需要为模块安装的钩子。如果提供,模块将安装钩子。
  • setup(可选)
    类型:(this: void, resolvedOptions: T, nuxt: Nuxt) => Awaitable<void | false | ModuleSetupReturn>
    模块的设置函数。如果提供,模块将调用设置函数。

示例

¥Examples

// https://github.com/nuxt/starter/tree/module
import { defineNuxtModule } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: 'my-module',
    configKey: 'myModule'
  },
  defaults: {
    test: 123
  },
  setup (options, nuxt) {
    nuxt.hook('modules:done', () => {
      console.log('My module is ready with current test option: ', options.test)
    })    
  }
})

installModule

以编程方式安装指定的 Nuxt 模块。当你的模块依赖于其他模块时,此功能非常有用。你可以将模块选项作为对象传递给 inlineOptions,它们将被传递给模块的 setup 函数。

¥Install specified Nuxt module programmatically. This is helpful when your module depends on other modules. You can pass the module options as an object to inlineOptions and they will be passed to the module's setup function.

类型

¥Type

async function installModule (moduleToInstall: string | NuxtModule, inlineOptions?: any, nuxt?: Nuxt)

参数

¥Parameters

moduleToInstall

类型:string | NuxtModule

¥Type: string | NuxtModule

必需:true

¥Required: true

要安装的模块。可以是包含模块名称的字符串,也可以是模块对象本身。

¥The module to install. Can be either a string with the module name or a module object itself.

inlineOptions

类型:any

¥Type: any

默认:{}

¥Default: {}

包含要传递给模块 setup 函数的模块选项的对象。

¥An object with the module options to be passed to the module's setup function.

nuxt

类型:Nuxt

¥Type: Nuxt

默认:useNuxt()

¥Default: useNuxt()

Nuxt 实例。如果未提供,它将通过 useNuxt() 调用从上下文中检索。

¥Nuxt instance. If not provided, it will be retrieved from the context via useNuxt() call.

示例

¥Examples

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

export default defineNuxtModule({  
  async setup (options, nuxt) {
    // will install @nuxtjs/fontaine with Roboto font and Impact fallback
    await installModule('@nuxtjs/fontaine', {
      // module configuration
      fonts: [
        {
          family: 'Roboto',
          fallbacks: ['Impact'],
          fallbackName: 'fallback-a',
        }
      ]
    })
  }
})