跳到主要内容

插件和中间件

了解如何从 Nuxt 2 迁移到 Nuxt Bridge 的新插件和中间件。

新插件格式

你现在可以迁移到 Nuxt 3 的插件 API,它在格式上与 Nuxt 2 略有不同。

插件现在只接受一个参数(nuxtApp)。你可以在文档中了解更多。

app/plugins/hello.ts
export default defineNuxtPlugin((nuxtApp) => {
  nuxtApp.provide('injected', () => 'my injected function')
  // 现在可在 `nuxtApp.$injected` 上使用
})
如果你想在插件中使用新的 Nuxt 组合式函数(例如 useNuxtAppuseRuntimeConfig),你需要为这些插件使用 defineNuxtPlugin 辅助函数。 ::
尽管通过 nuxtApp.vueApp 提供了一个兼容接口,但你应该避免以这种方式注册插件、指令、mixin 或组件,除非添加你自己的逻辑以确保它们不会被安装多次,否则可能会导致内存泄漏。 ::

新中间件格式

你现在可以迁移到 Nuxt 3 的中间件 API,它在格式上与 Nuxt 2 略有不同。中间件现在只接受两个参数(tofrom)。你可以在文档中了解更多。
export default defineNuxtRouteMiddleware((to) => {
  if (to.path !== '/') {
    return navigateTo('/')
  }
})

app/middleware 目录之外不支持使用 defineNuxtRouteMiddleware。 ::

definePageMeta

你也可以在 Nuxt Bridge 中使用 definePageMeta

它可以通过配置文件中的 macros.pageMeta 选项启用

nuxt.config.ts
import { defineNuxtConfig } from '@nuxt/bridge'

export default defineNuxtConfig({
  bridge: {
    macros: {
      pageMeta: true,
    },
  },
})
但仅适用于 middlewarelayout。 ::