37% OFF during Black Friday at Mastering Nuxt.
Nuxt Kit предоставляет набор утилит, которые помогут вам работать с Nitro. Эти функции позволяют вам добавлять серверные обработчики, плагины и маршруты для предварительного рендеринга.

Nitro - это TypeScript фреймворк с открытым исходный кодом для создания сверхбыстрых веб-серверов. Nuxt (и, по желанию, Nuxt Bridge) использует Nitro в качестве своего серверного движка. Вы можете использовать useNitro для доступа к экземпляру Nitro, addServerHandler для добавления обработчика сервера, addDevServerHandler для добавления обработчика сервера, который будет использоваться только в режиме разработки, addServerPlugin для добавления плагина для расширения поведения Nitro во время выполнения и addPrerenderRoutes для добавления маршрутов для предварительного рендеринга Nitro.

addServerHandler

Добавляет обработчик сервера Nitro. Используйте его, если вы хотите создать серверную middleware или настраиваемый маршрут.

Тип

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.
  • middleware (опциональный)
    Тип: boolean
    Указывает, что это обработчик middleware. Middleware вызываются на каждом маршруте и обычно не должны возвращать ничего для передачи следующим обработчикам.
  • 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: NitroDevEventHandler): void

export interface NitroDevEventHandler {
  handler: EventHandler;
  route?: string;
}

Параметры

handler

Тип: NitroEventHandler

Обязательный: true

Объект обработчика со следующими свойствами:

  • handler (обязательный)
    Тип: string
    Обработчик события.
  • route (опциональный)
    Тип: string
    Префикс пути или маршрут. Если используется пустая строка, будет использоваться в качестве middleware.

Примеры

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

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

    addDevServerHandler({
      handler: () => {
        return {
          body: `Ответ, сгенерированный в ${new Date().toISOString()}`
        }
      },
      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.

Вы можете вызывать useNitro() только после хука ready.
Изменения в конфигурации экземпляра 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('Использование экспериментального извлечения полезной нагрузки для полностью статического вывода. Вы можете отказаться от этого, установив `experimental.payloadExtraction` в значение `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

Добавление плагина для расширения runtime-поведения 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

Add routes to be prerendered to Nitro.

Тип

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

Параметры

routes

Тип: string | string[]

Обязательный: true

Добавляет маршруты для предварительного рендеринга в Nitro.

Примеры

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

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

addServerImportsDir

Добавьте директорию, которая будет сканироваться Nitro на предмет автоимпорта.

Тип

function addServerImportsDir (dirs: string | string[], opts: { prepend?: boolean }): void

Параметры

dirs

Тип: string | string[]

Обязательный: true

Директория или массив директорий, которые необходимо зарегистрировать для сканирования Nitro

Примеры

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

export default defineNuxtModule({
  meta: {
    name: 'my-module',
    configKey: 'myModule',
  },
  setup(options) {
    const resolver = createResolver(import.meta.url)
    addServerImportsDir(resolver.resolve('./runtime/server/utils'))
  }
})

addServerScanDir

Добавьте директории, которые будут сканироваться Nitro. Nitro будет проверять подкаталоги, которые будут зарегистрированы так же, как и папка ~/server.

Тип

function addServerScanDir (dirs: string | string[], opts: { prepend?: boolean }): void

Параметры

dirs

Тип: string | string[]

Обязательный: true

Директория или массив директорий, которые Nitro хочет зарегистрировать в качестве серверных директорий.

Примеры

import { defineNuxtModule, createResolver, addServerScanDir } from '@nuxt/kit'
export default defineNuxtModule({
  meta: {
    name: 'my-module',
    configKey: 'myModule',
  },
  setup(options) {
    const resolver = createResolver(import.meta.url)
    addServerScanDir(resolver.resolve('./runtime/server'))
  }
})