fix(bridge): define mixin outside plugin, to avoid memory leak (#3900)

This commit is contained in:
Daniel Roe 2022-03-25 12:51:07 +00:00 committed by GitHub
parent 38e92597f4
commit 7c1a8ae0d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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 {}
}
const metaMixin = {
[metaConfig.mixinKey] () {
const instance = getCurrentInstance()
const options = instance?.type || /* nuxt2 */ instance?.proxy?.$options
const nuxtApp = useNuxtApp()
if (!options || !('head' in options)) { return }
const source = typeof options.head === 'function'
? computed(() => options.head(nuxtApp))
: options.head
useMeta(source)
}
}
export default defineNuxtPlugin((nuxtApp) => {
useMeta(metaConfig.globalMeta)
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
useMeta(source)
}
})
nuxtApp.vueApp.mixin(metaMixin)
for (const name in Components) {
// eslint-disable-next-line import/namespace