defineNuxtPlugin

源代码
defineNuxtPlugin() 是用于创建 Nuxt 插件的辅助函数。

defineNuxtPlugin 是用于创建 Nuxt 插件的辅助函数,具有增强的功能和类型安全性。该工具将不同的插件格式规范化为与 Nuxt 插件系统无缝协作的一致结构。

plugins/hello.ts
export default defineNuxtPlugin((nuxtApp) => {
  // Doing something with nuxtApp
})
Read more in Docs > 4 X > Guide > Directory Structure > App > Plugins#creating Plugins.

类型

Signature
export function defineNuxtPlugin<T extends Record<string, unknown>> (plugin: Plugin<T> | ObjectPlugin<T>): Plugin<T> & ObjectPlugin<T>

type Plugin<T> = (nuxt: NuxtApp) => Promise<void> | Promise<{ provide?: T }> | void | { provide?: T }

interface ObjectPlugin<T> {
  name?: string
  enforce?: 'pre' | 'default' | 'post'
  dependsOn?: string[]
  order?: number
  parallel?: boolean
  setup?: Plugin<T>
  hooks?: Partial<RuntimeNuxtHooks>
  env?: {
    islands?: boolean
  }
}

参数

plugin:插件可以通过两种方式定义:

  1. 函数插件:一个接收 NuxtApp 实例的函数,如果您想在 NuxtApp 实例上提供一个助手函数,该函数可以返回一个带有可选 provide 属性的对象或一个 Promise。
  2. 对象插件:一个对象,可以包含多种属性来配置插件的行为,例如 nameenforcedependsOnorderparallelsetuphooksenv
PropertyTypeRequiredDescription
namestringfalse插件的可选名称,便于调试和依赖管理。
enforce'pre' | 'default' | 'post'false控制插件相对于其他插件的运行时机。
dependsOnstring[]false该插件依赖的插件名称数组。确保正确的执行顺序。
ordernumberfalse允许对插件顺序进行更细粒度的控制,应仅由高级用户使用。它会覆盖 enforce 的值并用于对插件进行排序。
parallelbooleanfalse是否与其他并行插件一起并行执行该插件。
setupPlugin<T>false主要的插件函数,相当于函数插件。
hooksPartial<RuntimeNuxtHooks>false要直接注册的 Nuxt 应用运行时钩子。
env{ islands?: boolean }false如果您不希望在渲染仅服务器或 Island 组件时运行该插件,请将此值设置为 false

示例

基本用法

下面的示例演示了一个向全局添加功能的简单插件:

plugins/hello.ts
export default defineNuxtPlugin((nuxtApp) => {
  // Add a global method
  return {
    provide: {
      hello: (name: string) => `Hello ${name}!`,
    },
  }
})

对象语法插件

下面的示例展示了具有高级配置的对象语法:

plugins/advanced.ts
export default defineNuxtPlugin({
  name: 'my-plugin',
  enforce: 'pre',
  async setup (nuxtApp) {
    // Plugin setup logic
    const data = await $fetch('/api/config')

    return {
      provide: {
        config: data,
      },
    }
  },
  hooks: {
    'app:created' () {
      console.log('App created!')
    },
  },
})