diff --git a/packages/nuxt3/src/meta/runtime/plugin.ts b/packages/nuxt3/src/meta/runtime/plugin.ts index 7d501e1312f..56379f73461 100644 --- a/packages/nuxt3/src/meta/runtime/plugin.ts +++ b/packages/nuxt3/src/meta/runtime/plugin.ts @@ -1,7 +1,7 @@ import { computed, getCurrentInstance } from 'vue' import * as Components from './components' import { useMeta } from './composables' -import { defineNuxtPlugin } from '#app' +import { defineNuxtPlugin, useNuxtApp } from '#app' // @ts-ignore import metaConfig from '#build/meta.config.mjs' @@ -10,22 +10,25 @@ declare module 'vue' { export interface GlobalComponents extends MetaComponents {} } -export default defineNuxtPlugin((nuxtApp) => { - useMeta(metaConfig.globalMeta) +const metaMixin = { + [metaConfig.mixinKey] () { + const instance = getCurrentInstance() + const options = instance?.type || /* nuxt2 */ instance?.proxy?.$options + const nuxtApp = useNuxtApp() + if (!options || !('head' in options)) { return } - nuxtApp.vueApp.mixin({ - [metaConfig.mixinKey] () { - const instance = getCurrentInstance() - const options = instance?.type || /* nuxt2 */ instance?.proxy?.$options - if (!options || !('head' in options)) { return } + const source = typeof options.head === 'function' + ? computed(() => options.head(nuxtApp)) + : options.head - const source = typeof options.head === 'function' - ? computed(() => options.head(nuxtApp)) - : options.head + useMeta(source) + } +} + +export default defineNuxtPlugin((nuxtApp) => { + useMeta(metaConfig.globalMeta) - useMeta(source) - } - }) + nuxtApp.vueApp.mixin(metaMixin) for (const name in Components) { // eslint-disable-next-line import/namespace