defineNuxtPlugin 是一个辅助函数,用于创建具有增强功能和类型安全的 Nuxt 插件。此实用工具将不同的插件格式标准化为一致的结构,以便在 Nuxt 的插件系统中无缝运行。
export default defineNuxtPlugin((nuxtApp) => {
// Doing something with nuxtApp
})
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
}
}
插件:插件可以通过两种方式定义
NuxtApp 实例的函数,如果要在 NuxtApp 实例上提供辅助函数,则可以返回一个带有 provide 属性的潜在对象的 Promise。name、enforce、dependsOn、order、parallel、setup、hooks 和 env。| 属性 | 类型 | 必需 | 描述 |
|---|---|---|---|
name | string | false | 插件的可选名称,用于调试和依赖管理。 |
enforce | 'pre' | 'default' | 'post' | false | 控制插件相对于其他插件的运行时间。 |
dependsOn | string[] | false | 此插件依赖的插件名称数组。确保正确的执行顺序。 |
order | number | false | 这允许对插件顺序进行更精细的控制,并且仅应由高级用户使用。它会覆盖 enforce 的值,并用于对插件进行排序。 |
parallel | boolean | false | 是否与其他并行插件并行执行插件。 |
setup | Plugin<T> | false | 主插件函数,等同于函数插件。 |
hooks | Partial<RuntimeNuxtHooks> | false | 要直接注册的 Nuxt 应用程序运行时钩子。 |
env | { islands?: boolean } | false | 如果不想在渲染仅服务器或岛屿组件时运行插件,请将此值设置为 false。 |
以下示例演示了一个添加全局功能的简单插件
export default defineNuxtPlugin((nuxtApp) => {
// Add a global method
return {
provide: {
hello: (name: string) => `Hello ${name}!`,
},
}
})
以下示例展示了具有高级配置的对象语法
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!')
},
},
})