Nuxt3 中文课程 《实战全栈开发简书》.

Nuxt Kit提供了一组工具,帮助你使用Nitro。这些函数允许你添加服务器处理程序、插件和预渲染路由。

Nitro是一个用于构建超快速Web服务器的开源TypeScript框架。Nuxt 3(可选地使用Nuxt Bridge)使用Nitro作为其服务器引擎。你可以使用useNitro来访问Nitro实例,使用addServerHandler来添加服务器处理程序,使用addDevServerHandler来添加仅在开发模式下使用的服务器处理程序,使用addServerPlugin来添加插件以扩展Nitro的运行时行为,并使用addPrerenderRoutes来添加由Nitro预渲染的路由。

addServerHandler

添加一个Nitro服务器处理程序。如果你想创建服务器中间件或自定义路由,可以使用它。

类型

function addServerHandler (handler: NitroEventHandler): void

export interface NitroEventHandler {
  handler: string;
  route?: string;
  middleware?: boolean;
  lazy?: boolean;
  method?: string;
}

参数

handler

类型NitroEventHandler

必填true

一个具有以下属性的处理程序对象:

  • handler(必填)
    类型string
    事件处理程序的路径。
  • route(可选)
    类型string
    路径前缀或路由。如果使用空字符串,将用作中间件。
  • middleware(可选)
    类型boolean
    指定这是一个中间件处理程序。中间件会在每个路由上调用,通常应该返回空值以传递给下一个处理程序。
  • lazy(可选)
    类型boolean
    使用延迟加载来导入处理程序。
  • method(可选)
    类型string
    路由方法匹配器。如果处理程序名称包含方法名,将用作默认值。

示例

// https://github.com/nuxt-modules/robots
import { createResolver, defineNuxtModule, addServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options) {
    const resolver = createResolver(import.meta.url)

    addServerHandler({
      route: '/robots.txt'
      handler: resolver.resolve('./runtime/robots.get.ts')
    })
  }
})

addDevServerHandler

添加一个仅在开发模式下使用的Nitro服务器处理程序。此处理程序将在生产构建中被排除。

类型

function addDevServerHandler (handler: NitroEventHandler): void

export interface NitroEventHandler {
  handler: string;
  route?: string;
  middleware?: boolean;
  lazy?: boolean;
  method?: string;
}

参数

handler

类型NitroEventHandler

必填true

一个具有以下属性的处理程序对象:

  • handler(必填)
    类型string
    事件处理程序的路径。
  • route(可选)
    类型string
    路径前缀或路由。如果使用空字符串,将用作中间件。
  • middleware(可选)
    类型boolean
    指定这是一个中间件处理程序。中间件会在每个路由上调用,通常应该返回空值以传递给下一个处理程序。
  • lazy(可选)
    类型boolean
    使用延迟加载来导入处理程序。
  • method(可选)
    类型string
    路由方法匹配器。

示例

import { createResolver, defineNuxtModule, addDevServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    const resolver = createResolver(import.meta.url)

    addDevServerHandler({
      handler: resolver.resolve('./runtime/uptime.get'),
      route: '/_handler'
    })
  }
})
// https://github.com/nuxt-modules/tailwindcss
import { joinURL } from 'ufo'
import { defineNuxtModule, addDevServerHandler } from '@nuxt/kit'

export default defineNuxtModule({
  async setup(options) {
    const route = joinURL(nuxt.options.app?.baseURL, '/_tailwind')

    // @ts-ignore
    const createServer = await import('tailwind-config-viewer/server/index.js').then(r => r.default || r) as any
    const viewerDevMiddleware = createServer({ tailwindConfigProvider: () => options, routerPrefix: route }).asMiddleware()

    addDevServerHandler({ route, handler: viewerDevMiddleware })
  }
})

useNitro

返回Nitro实例。

只能在ready钩子之后调用useNitro()
对Nitro实例配置的更改不会生效。

类型

function useNitro (): Nitro

export interface Nitro {
  options: NitroOptions;
  scannedHandlers: NitroEventHandler[];
  vfs: Record<string, string>;
  hooks: Hookable<NitroHooks>;
  unimport?: Unimport;
  logger: ConsolaInstance;
  storage: Storage;
  close: () => Promise<void>;
  updateConfig: (config: NitroDynamicConfig) => void | Promise<void>;
}

示例

// https://github.com/nuxt/nuxt/blob/4e05650cde31ca73be4d14b1f0d23c7854008749/packages/nuxt/src/core/nuxt.ts#L404
import { defineNuxtModule, useNitro, addPlugin, createResolver } from '@nuxt/kit'

export default defineNuxtModule({
  setup(options, nuxt) {
    const resolver = createResolver(import.meta.url)

    nuxt.hook('ready', () => {
      const nitro = useNitro()
      if (nitro.options.static && nuxt.options.experimental.payloadExtraction === undefined) {
        console.warn('Using experimental payload extraction for full-static output. You can opt-out by setting `experimental.payloadExtraction` to `false`.')
        nuxt.options.experimental.payloadExtraction = true
      }
      nitro.options.replace['process.env.NUXT_PAYLOAD_EXTRACTION'] = String(!!nuxt.options.experimental.payloadExtraction)
      nitro.options._config.replace!['process.env.NUXT_PAYLOAD_EXTRACTION'] = String(!!nuxt.options.experimental.payloadExtraction)

      if (!nuxt.options.dev && nuxt.options.experimental.payloadExtraction) {
        addPlugin(resolver.resolve(nuxt.options.appDir, 'plugins/payload.client'))
      }
    })
  }
})

addServerPlugin

添加插件以扩展Nitro的运行时行为。

你可以在Nitro文档中了解更多关于Nitro插件的信息。

类型

function addServerPlugin (plugin: string): void

参数

plugin

类型string

必填true

插件的路径。插件必须导出一个接受Nitro实例作为参数的函数。

示例

import { createResolver, defineNuxtModule, addServerPlugin } from '@nuxt/kit'

export default defineNuxtModule({
  setup() {
    const resolver = createResolver(import.meta.url)
    addServerPlugin(resolver.resolve('./runtime/plugin.ts'))
  }
})

addPrerenderRoutes

添加要由Nitro预渲染的路由。

类型

function function addPrerenderRoutes (routes: string | string[]): void

参数

routes

类型string | string[]

必填true

要预渲染的路由或路由数组。

示例

import { defineNuxtModule, prerenderRoutes } from '@nuxt/kit'

export default defineNuxtModule({
  meta: {
    name: 'nuxt-sitemap',
    configKey: 'sitemap',
  },
  defaults: {
    sitemapUrl: '/sitemap.xml',
    prerender: true,
  },
  setup(options) {
    if (options.prerender) {
      prerenderRoutes(options.sitemapUrl)
    }
  }
})